递归如何返回?

时间:2019-03-05 23:46:23

标签: python recursion

def sum_it(n,y):
if n ==0:
    return y 
else:
    return sum_it(n-1,n+y)

sum_it(3,4)的必需输出,即(3 + 2 + 1)+4必须为10 但获得的输出是5

请问退货的实际运作方式是什么?

2 个答案:

答案 0 :(得分:0)

如果您打算对(3 + 2 + 1)+ 4求和,则此代码将起作用。

def sum_it(n,y):
    if( n == 1): 
        return y + 1
    else:         
        return(n + sum_it(n-1,y))

例如,sum_it(3,4)的工作方式如下

sum_it(3,4) returns 3 + sum_it(2,4)
sum_it(2,4) returns 2 + sum_it(1,4)
sum_it(1,4) returns 1 + 4

这是

sum_it(3,4) returns 3 + 2 + 1 + 4

答案 1 :(得分:0)

虽然还不清楚,但调用sum_it(n,y)时似乎需要的是1到n加上y的自然数之和。

此初始和也称为“第n个”三角数。

Triangular Number

如果是这种情况,您实际上不需要递归:

def sum_it(n,y):
    return (n*(n+1))//2 + y

如果必须进行递归:

def sum_it(n,y):
    if (n > 1):
        return n + sum_it(n-1,y)
    return n + y

随时询问是否还有疑问。