递归以使用Python中的else来打印前十个数字的和

时间:2018-06-26 10:07:38

标签: python if-statement recursion

def ad(a): 
    return a+ad(a+1) if a<10 else return a
ad(1)

返回表明无效语法的错误 有什么想法吗?

3 个答案:

答案 0 :(得分:1)

def ad(a): return a+ad(a+1) if a<10 else a ad(1)

您的代码不起作用,因为您已在return语句中编写了return语句。
我的代码的解释非常简单:
当a达到10时,返回10,否则返回其数字和ad(下一个数字)的总和。

a(10) = 10  
a(9) = 9 + a(10) = 9 + 10 = 19  
a(8) = 8 + a(9) = 8 + 19 = 27  

...

a(1) = 1 + a(2) = 1 + 54 = 55

答案 1 :(得分:0)

您有错别字。

def ad(a):
    return a+ad(a+1) if a<10 else ad(1)

但这也是逻辑错误。

更新:可能您期望这样:

def ad(a):
    return a + ad(a + 1) if a < 10 else 1

答案 2 :(得分:0)

您问我们是否有任何想法。我的想法是,编写仅适用于一般问题的一种情况的函数没有多大意义。如果您只计算10,则最好预先计算答案并将其连线返回55。

我建议采用一种更通用的实现,该实现计算从传递的参数到零的总和,或者如果它为负,则仅返回该参数:

def sum_to(x):
    return x + sum_to(x-1) if x > 1 else x

print(sum_to(0))    # => 0
print(sum_to(10))   # => 55
print(sum_to(20))   # => 210
print(sum_to(-10))  # => -10

(尽管实际上,我将使用直接计算公式x * (x + 1) / 2而不是递归。)