演習課題「再帰呼び出し」
右側のコードエリアには、関数 rec_product が用意されています。
再帰呼び出しを活用して仮引数 n から 1
までの積を求めるような処理を記述してください。
期待する出力値
3628800
※有料会員になるとこの動画をご利用いただけます
詳しい説明を読む
#06:再帰呼び出し
このチャプターでは、再帰呼び出しについて学習しましょう。
- 再帰呼び出しとは、関数のなかで、いまの関数とおなじ関数を呼び出すこと
- 再帰呼び出しを使うと、次のコードのように書ける
def count_down(n):
print(n)
if n == 0:
return
count_down(n-1)
- 【 考え方1 】
- count_down 関数では、仮引数 n の値を出力して、count_down 関数を実引数 n-1 で呼び出している
- n-1 で呼び出した count_down 関数でも同様の処理をおこなって、次の count_down 関数を呼び出す
- このサイクルが続くことで、n から延々とカウントダウンできる
- 今回は 0 までカウントダウンしたいから、仮引数 n の値が 0 になったとき、return 文でリターンして、次の count_down 関数を呼び出さないようにしている
- 【 考え方2 】
- 「count_down 関数 = 実引数として渡した値から 0 までの値を出力する関数」と意識する
- 仮引数 n の値を出力して、count_down 関数を実引数 n-1 で呼び出せば、「n の値を出力」+「n-1 から 0 までの値を出力」となり、n から 0 までカウントダウンすることができる
- 【 考え方1 】
- 再帰呼び出しを使うと、次のコードのように書ける
def rec_sum(n):
if n == 0:
return 0
return n + rec_sum(n-1)
- 【 考え方1 】
- rec_sum 関数では、仮引数 n の値と rec_sum(n-1) の返り値を足したものを return 文で返そうとする
- 呼び出された rec_sum(n-1) では、n-1 と rec_sum(n-2) の返り値を足したものを return 文で返そうとする
- このサイクルが続くことで、n + n-1 + ... の値を求めることができるが、サイクルが続く限り、rec_sum(n), rec_sum(n-1), ... の値が確定しない
- 今回は 0 までの和を求めたいから、仮引数 n の値が 0 になったとき、return 文で 0 を返して、次の rec_sum 関数を呼び出さないようにすることで、サイクルを止めて、rec_sum(1), rec_sum(2), ..., rec_sum(n-1), rec_sum(n) の値を確定させる
- 【 考え方2 】
- 「rec_sum 関数 = 実引数として渡した値から 0 までの値を返す関数」と意識する
- 仮引数 n の値と rec_sum(n-1) の値を足せば、「n」+「n-1 から 0 までの和」となり、n から 0 までの和の値を求めることができる
- 【 考え方1 】
ログインすると採点できます
コードの実行