-1

再帰コードを Java から Python に変換するのに問題があります。この関数が行うことは、配列 (またはリスト) 内の要素を合計することだけです。

public static int Summ(int [] arr, size)
{
   if(size == 0)
      return 0
   else
    return arr[size-1] + Summ(arr,size-1);

}  <-- works fine

ただし、Python では、次のエラー メッセージが表示されます: TypeError: unsupported operand type(s) for +: 'int' and 'list'. この問題を解決する方法について何か提案はありますか? ありがとう!

def Sum(arr,size):
   if size == 0:
     return 0
   else:
     return arr[size-1] + Summ(arr,size-1)
4

4 に答える 4

4

あなたはただ使うことができます

sum(arr)

これは、リスト内の値の合計を返します。

于 2013-01-08T19:54:48.917 に答える
3
def Sum(arr,size):
   if size == 0:
     return 0
   else:
     return arr[size-1] + Sum(arr,size-1)

a=[1,2,3]  
b=Sum(a,3)
print b

版画6

于 2013-01-08T20:01:26.053 に答える
0

Pythonコードを見ないと、何が起こっているのかを正確に知ることは困難ですが、エラーメッセージに基づいて、Summメソッドがintではなくリストを返している可能性があります。

Summオブジェクトが実際にintを返している場合、arrオブジェクトには実際にはリストのリストが含まれている可能性があります。

于 2013-01-08T19:59:21.440 に答える
0

これを本当に「末尾」再帰にしたい場合:

def Sum(lst):
    if not lst:
        raise ValueError("Summing an empty iterable?  That's nonsense")
    return lst[0]+Sum(lst[1:]) if len(lst) > 1 else lst[0]

しかし、組み込みsum関数は間違いなくより良い賭けです-それはどんな反復可能でも機能し、より効率的であり、それを使用して再帰制限に達する可能性はありません。

Pythonは、他の多くの言語のように末尾再帰用に実際に構築されているわけではありません。Guidoは、いつでもループとして再コーディングできるので、心配する価値はないと考えているようです。

于 2013-01-08T19:59:30.383 に答える