return a + multiple(a,b-1) この最後の行が何をしているのかが理解できません
引数aに対して引数aと引数bから1を引いた物をたしている??のでしょうか??
関数 multiple
に引数 a
と b - 1
を与えた結果を
引数 a
と加算して、結果を呼び出し元に返しています
該当の箇所は次のように書き換えても同様の動作となります:
python
1 result_multiple = multiple(a, b - 1)
2 result_sum = a + result_multiple
3 return result_sum
再帰呼び出しを理解するために
プログラムがどのような順番で動作するかを確認するために
次のように、print
を追加して実行途中の変数を出力してみましょう:
python
1def multiple(a,b):
2 print("a=" + str(a) + ", b=" + str(b))
3 if b < 0:
4 print("start case b < 0")
5 return_value = -multiple(a,-b)
6 print("finish case b < 0")
7 print("return_value=" + str(return_value))
8 return return_value
9 elif b == 0:
10 print("start case b = 0")
11 return_value = 0
12 print("finish case b = 0")
13 print("return_value=" + str(return_value))
14 return return_value
15 elif b == 1:
16 print("start case b = 1")
17 return_value = a
18 print("finish case b = 0")
19 print("return_value=" + str(return_value))
20 return return_value
21 else:
22 print("start case b > 1")
23 return_value = a + multiple(a,b-1)
24 print("finish case b > 1")
25 print("return_value=" + str(return_value))
26 return return_value
27
28#【実行結果】
29print(multiple(3,5))
実行結果:
console
1$ python test.py
2a=3, b=5
3start case b > 1
4a=3, b=4
5start case b > 1
6a=3, b=3
7start case b > 1
8a=3, b=2
9start case b > 1
10a=3, b=1
11start case b = 1
12finish case b = 0
13return_value=3
14finish case b > 1
15return_value=6
16finish case b > 1
17return_value=9
18finish case b > 1
19return_value=12
20finish case b > 1
21return_value=15
2215