### Run the code below and understand the error messages
### Fix the code to sum integers from 1 up to k
###
def f(k):
return f(k-1) + k
print(f(10))
我对如何在使用递归时修复此代码感到困惑,我不断收到错误消息 [上一行重复995次] RecursionError:超出最大递归深度 有没有一种简单的方法来解决这个问题,而不使用任何while循环或创建多个变量?
答案 0 :(得分:1)
通常递归会有termination condition
,即base case
。当您的变量达到该值时,不再有递归函数调用。
例如在你的代码中,
def f(k):
if(k == 1):
return k
return f(k-1) + k
print(f(10))
我们定义基本情况1,如果你想从n到1取值的总和。如果你希望总和扩展到那个数字,你可以放置任何其他数字,正数或负数。例如也许你想从n到-3取总和,那么基本情况就是k == -3。
答案 1 :(得分:0)
Python没有优化尾递归。您 f 函数调用 f 时间。如果k是非常大的数字,那么Python trow RecursionError。您可以通过sys.getrecursionlimit查看递归限制,并通过sys.setrecursionlimit进行更改。但改变限制不是好主意。而不是改变你可以改变你的代码逻辑或模式。
答案 2 :(得分:0)
您的递归永远不会终止。你可以尝试:
def f(k):
return k if k < 2 else f(k-1) + k
print(f(10))
答案 3 :(得分:0)
您正在计算从1到10的所有数字的总和,从本质上讲,它返回第10个三角数。例如。 the number of black circles in each triangle
使用公式on OEIS让您这作为代码。
def f(k):
return int(k*(k+1)/2)
print(f(10))
我们怎么知道INT()不破呢? k和k + 1是相邻的数字,并且其中一个必须具有2的因数,因此如果给出整数,此公式将始终返回整数。