2012-05-11 6 views
0

私は試験のために練習し、これを理解しようとしています。私はちょうどちょうどちょうどaddメソッドを使ってやっていません。これは私がこれまで持っているものです。クラスでの再帰の使用

class recursion: 
    def __init__(self, lst=[]): 
     self.lst = lst 

    def add(self, x, y): 
     return x + y 

    def recurs(self): 
     if len(self.lst) == 1: 
      return lst[0] 
     else: 
      return self.lst[0].add(self.recurs(lst[1:]) 
+1

正確に行うはずのコードは何ですか? – srgerg

+2

なぜクラスにaddメソッドがありますか? – Venge

+0

@Patrickなぜ、あなた自身の 'add'メソッドを作るのではなく' sum'を使うのですか? – jamylak

答えて

4

あなたは再帰的にリストの合計を取得しようとしていると仮定すると:

は基本的に、recursive_sum_helperは小さいリストで自身を呼び出し続けます:

合計(1、2、3、4)= 1つの+ SUM(2,3,4)= 1 +(2 + SUM(3,4))= ...

class recursive_summer: 
    def __init__(self, lst=[]): 
     self.lst = lst 
    def recursive_sum(self): 
     return self.recursive_sum_helper(self.lst) 
    def recursive_sum_helper(self, a_lst): 
     if len(a_lst) == 1: 
      return a_lst[0] 
     else: 
      first_element = a_lst[0] 
      list_without_first_element = a_lst[1:] 
      return first_element + self.recursive_sum_helper(list_without_first_element) 

r = recursive_summer([1,2,3,4]) 
r.recursive_sum() 

出力は10です。

これは、あなたが解決しようとしている問題があれば助けてください。

0

再帰せずにリストの合計を取得するための別の方法が、より高速かつ効果的:

>>> a = [1,2,3] 
>>> sum(a) 
6 
>>> 
+1

質問に2番目の単語として再帰が記載されている場合は、これを回答として投稿しないでください。 – jamylak

+0

それは実際には答えていませんが、それは試験準備のための参考になるかもしれません –

+0

それは本当にコメントする必要がありますが、あなたは決して心配しないで質問にコメントする十分な担当者がありません。 – jamylak

1

それがこれを行うための再帰方法ですが、よりクリーン:

それはリストからpopメソッドを使用しています

class rec(object): 
    def __init__(self): 
     self.sum = 0 

    def recur(self, list): 
     if len(list) > 0: 
      self.sum += list.pop() 
      self.recur(list) 
     else: 
      return self.sum 

使用:

>>> from code import rec 
>>> a = rec() 
>>> b = [1,2,3] 
>>> print a.recur(b) 
6