python递归公式_带有公式的Python无限递归

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

此函数始终会自行调用,从而导致无限递归。 在某个时候应该返回一个实际值。 在这种情况下,需要一些if-then-else魔术。 ;)

通常,递归将具有termination condition,即base case。当您的变量达到该值时,将不再有递归函数调用。

例如在您的代码中

def f(k):

if(k == 1):

return k

return f(k-1) + k

print(f(10))

如果要将值的总和从n扩展到1,我们定义基本情况1。如果希望将总和扩展到该数字,则可以在其中放置任何其他数字(正数或负数)。例如也许您想将n从n取到-3,则基本情况为k == -3。

您正在计算从1到10的所有数字的总和,实际上这将返回第十个三角数。例如。每个三角形中黑色圆圈的数量

在OEIS上使用公式可以将其作为代码。

def f(k):

return int(k*(k+1)/2)

print(f(10))

我们怎么知道int()不会破坏这一点? k和k + 1是相邻的数字,并且其中一个必须具有2的因数,因此,如果给定整数,此公式将始终返回整数。

您的递归永远不会终止。您可以尝试:

def f(k):

return k if k < 2 else f(k-1) + k

print(f(10))

Python没有优化的尾递归。您可以通过f函数调用k次。如果k是一个非常大的数字,那么Python会抛出RecursionError。您可以通过sys.getrecursionlimit查看什么是递归限制,并通过sys.setrecursionlimit进行更改。但是改变极限不是一个好主意。您无需更改即可更改代码逻辑或模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值