2012-02-01 99 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