前回(2020/07/17)の内容 条件分岐 ( if 構文 / switch 構文 ) 再帰 again if 構文 if ( 条件 ) { 条件が成立した時の命令 } else { 条件が不成立の時の命令 } 基本形 : これだけ知っていれば、なんでもできる => よりよい表現 / 他の人のプログラムを読む => 基本以外の表現も知っていた方がよい else 節の省略 「条件が不成立の時の命令」が空の時は、 else 以後(else 節)は、省略可能 if ( 条件 ) { 条件が成立した時の命令 } else if else 節の中身が、一つの if 構文の時、 else の {} を省略しよう <<基本>> if ( 条件1 ) { .. } else { if ( 条件2 ) { .. } else { .. } } => if ( 条件1 ) { .. } else if ( 条件2 ) { .. } else { .. } => if ( 条件1 ) { .. } else if ( 条件2 ) { .. } else { .. } # else 節 ( then 節 も ) 命令が一個なら {} は省略可能 # 命令が一つなら # if ( 条件 ) # 命令 <= 命令が一つの文 # else # 命令 <= 命令が一つの文 # とできるが、これは、推奨しない # {}がなくなると、if 構文の範囲がわかりにくなる # 後になって、命令を増やしたり、減らしたりする事があったら # {} があれば、命令を増やしたりへらしたりできる # {} をつけないと、{} が追加が必要 switch 構文 条件分岐を行う構文 if 構文が 2 択 / 任意の条件 switch 構文が n 択 / ある式の値が整数値と一致するかどうか switch ( 整数式 ) { case 定数1: 整数式の値が定数1と一致した場合の命令 break; case 定数2: 整数式の値が定数2と一致した場合の命令 break; .. case 定数n: 整数式の値が定数nと一致した場合の命令 break; default: 式の値が定数1〜定数n のいずれにも一致しなかった場合の命令 break; } <=> if ( 整数式 == 定数1 ) { 整数式の値が定数1と一致した場合の命令 } else if ( 整数式 == 定数2 ) { 整数式の値が定数2と一致した場合の命令 ... } else if ( 整数式 == 定数n ) { 整数式の値が定数nと一致した場合の命令 } else { 式の値が定数1〜定数n のいずれにも一致しなかった場合の命令 } == 再帰の再び 「関数の再帰的定義」 関数を定義する時に、その本体で、自分自身を呼び出す # 「定義」 # 新しい概念(言葉や記号であらわす)を、 # 既存の(すでに定義済みの)概念(言葉や記号)で表現する事 # 例: # 素数 # 自分自身と1の二つだけを約数とする自然数 # 例 : 3 .. 約数 1, 3 / 11 : 11 1 # 反例 : 1 .. 1, 12 = 1, 12, 3, 4 # 素数の定義の時に、約数、自然数などの定義済言葉を使う 再帰的定義 1 (n=0) n 階乗 : n! = { n * ((n-1)!) (n>0) # 再帰的が循環論法になっているようみえるが、大丈夫 # 3! = 3 * 2! = 3 * 2 * 1! = 3 * 2 * 1 * 0! = 3 * 2 * 1 = 6 !!! 「数学的帰納法」を基礎としている 関数を再帰的に定義する => 命令を(不特定多数)繰り返す事が可能 組み合わせ基本構文 : 順接、条件分岐、繰り返し => 万能 C 言語 : 並べる、if 構文・switch構文、関数の再帰的定義 階乗の関数定義 全体の計算をするために、一部の計算を行い、その結果を用いる => 再帰(帰納法) # n! : 全体 <=> (n-1)! : 一部 # 一部の計算に、再帰が利用できる(と便利な事が多い) 一部の計算結果が、関数の値として得られる 総和: 数列 {n} = 1, 2, 3, .., n の和 Σi = 1 + 2 + 3 + .. + n sum(n) = 1 + .. + (n-1) + n = (1 + .. + (n-1)) + n = sum(n-1) + n => 再帰呼び出しの部分 sum(0) = 0 => 0 (n=0 の時) sum(n) = { sum(n-1)+n (n>0 の時) sum(n) = 0 + 1 + .. + (n-1) + n = 0 + (1 + .. + (n-1)) + n = sum(n-1) + n p-005.c 関数の値が、計算結果の蓄積を行っている p-006.c 引数の値が、計算結果の蓄積を行っている 計算が終了した時点で、(蓄積された計算結果である)引数の値を返す事により、 関数値が(求める)計算結果になるようにしている 本日(2020/07/24) 18:00 〜 19:00 に「質問の時間(会議 ID : hrh-kuav-nhm)」 模擬試験/試験と同じ会議 ID