Python如何阻止自身重演?

问题描述 投票:-2回答:1

想象一下,我按照(显然效率低下的)递归算法计算Fibonacci序列:

def Fibo(n):
    if n <= 1:
       return(n)
    else: 
       return(Fibo(n-2) + Fibo(n-1))

那么我的问题是:Python如何知道它必须阻止n=0的复发?

毕竟,如果我调用qazxsw poi,Python显然会回答qazxsw poi,那么为什么在调用Fibo(-12)时会停止-12的递归呢?

几条评论后编辑:这个问题与复发的数学概念无关。我知道在初始化点停止复发。我想了解计算机中如何实现重复。对于我来说,当没有明确的停止命令时,计算机应该停止时,我绝对不清楚。是什么阻止了Fibo(0)= Fibo(-1)+ Fibo(-2)继续无休止?因为毕竟我把Fibo(-1)= - 1,Fibo(-2)= - 2,......并且我可能想要总结所有负数...我在最后一个案例中承认我更喜欢做一个n=0循环。

python recurrence
1个回答
2
投票

它是功能性的,因此它不会运行,所以它也不会停止。你(仍)在思考迭代编程并假设某种循环需要在某个时间停止。不是这种情况。

相反,在这个范例中,您只需声明返回值是前两个数字的总和。此时您并不关心先前的数字是如何产生的,这里您只假设它们已经存在。

当然他们没有,你也必须计算它们,但这仍然不是一个需要停止的循环。相反,它是一个具有锚点的递归。对于每个递归步骤,值将变得越来越小,一旦它们达到低于2的值,您只需返回0或1而不进行任何进一步的递归。这是你的主播。

随意将其视为“停止点”,但要注意不存在需要突破或类似的循环。

© www.soinside.com 2019 - 2024. All rights reserved.