Python无限递归与公式

时间:2017-10-10 05:29:52

标签: python-3.x recursion

### 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循环或创建多个变量?

4 个答案:

答案 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的因数,因此如果给出整数,此公式将始终返回整数。