-2
再帰関数を頭に置くのが難しいです。 私は再帰的なものに変換したいと思うこの機能を持っています。 あなたは私を助けることができますか?あなたのコードの背後にある推論は何ですか?Pythonこの関数を再帰関数に変換します
正常な機能:
def sum(arg):
result = 0
for i in arg:
result += i
return result
再帰関数を頭に置くのが難しいです。 私は再帰的なものに変換したいと思うこの機能を持っています。 あなたは私を助けることができますか?あなたのコードの背後にある推論は何ですか?Pythonこの関数を再帰関数に変換します
正常な機能:
def sum(arg):
result = 0
for i in arg:
result += i
return result
def recursive_sum(arg):
return arg[0] + recursive_sum(arg[1:]) if arg else 0
合算のタスクは、2つの動作の1に削減することができます。arg
が空リストでない場合
、そして和ですarg
の第1の要素+第1の要素なしの同じ要素arg
のすべての要素の合計に等しい。すなわち、arg[1:]
。しかし、この第2期はrecursive_sum
を新しいarg
にも適用することによって得ることができます!
arg
が空のリストである場合、合計は明らかにゼロです。これはベースケースと呼ばれます。あなたの再帰が終了するのは、です。
これは、次のリストでどのように機能するかあなたが見ることができます:arg[1:]
を行うことlist splicingの一例であることを
recursive_sum([1,2,3,4,5])
-> 1 + recursive_sum([2,3,4,5])
-> 1 + (2 + recursive_sum([3,4,5]))
-> ...
-> 1 + 2 + 3 + 4 + 5 + recursive_sum([])
-> 1 + 2 + 3 + 4 + 5 + 0
= 15
注意、あなたが最初以外のすべての新しいリストを取得することができます要素があり、if list
を実行するだけでリストが空であるかどうかをテストできます。