2016-05-11 20 views
-2

再帰関数を頭に置くのが難しいです。 私は再帰的なものに変換したいと思うこの機能を持っています。 あなたは私を助けることができますか?あなたのコードの背後にある推論は何ですか?Pythonこの関数を再帰関数に変換します

正常な機能:

def sum(arg): 
    result = 0 
    for i in arg: 
     result += i 
    return result 

答えて

1
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を実行するだけでリストが空であるかどうかをテストできます。