2012-02-01 98 views
1
def recursiveadd(x,sum1): 
    if x > 0: 
     sum1 += x 
     recursiveadd(x-1,sum1) 
    else: 
     return sum1 

print recursiveadd(100,0) 

添加之後插入「print sum1」表明sum1正在增加,所以我不明白爲什麼函數返回None。我唯一能想到的就是sum1在返回之前被重置爲0,但我不知道爲什麼會這樣。爲什麼這個遞歸求和函數返回None?

+1

跟蹤代碼,並Look的返回什麼,強調*返回*。 – FatalError 2012-02-01 16:46:50

+2

請注意,tail-recursion可能會炸燬python中的堆棧。 – 2012-02-01 16:49:39

+0

@MattFenwick:你可以[不要炸掉堆棧](http://ideone.com/IvIyC) – jfs 2012-02-01 17:39:54

回答

10

你需要寫

def recursiveadd(x,sum1): 
    if x > 0: 
     sum1 += x 
     return recursiveadd(x-1,sum1) 
    else: 
     return sum1 

print recursiveadd(100,0) 
0
In [52]: def rec(x, sum = None): 
if sum == None: 
    sum = 0 
if x > 0: 
    sum += x 
    return rec(x - 1, sum) 
else:   
    return sum 

....:

In [53]: rec(100) 
Out[53]: 5050