假设我按照(显然效率不高的)递归算法来计算斐波那契数列:
def Fibo(n):
if n <= 1:
return(n)
else:
return(Fibo(n-2) + Fibo(n-1))
那么我的问题是:Python如何知道它必须在n=0
处停止重复发生?
毕竟,如果我调用Fibo(-12)
,Python显然会回答-12
,那么为什么为什么要在例如调用n=0
的同时在Fibo(12)
停止递归?
在评论后编辑:
这个问题与递归的数学概念无关。我知道复发会在初始化点停止。我想了解如何在计算机中实现复发。对我来说,当计算机没有明确的停止命令就应该停止时,这是绝对不清楚的。是什么阻止了Fibo(0)= Fibo(-1)+ Fibo(-2)不断循环?因为毕竟我将Fibo(-1)=-1,Fibo(-2)=-2,...归纳为...,所以我可能还要对所有负数求和...
我承认在最后一种情况下,我更喜欢进行while
循环。
答案 0 :(得分:2)
它是功能性的,因此不会运行,因此也不会 stop 。您(仍)在考虑迭代编程,并在此处假设需要某种时间停止的某种循环。事实并非如此。
在此范式中,您只是声明返回值 是前两个数字的和。此时,您无需关心先前数字的产生方式,只需假设它们已经存在即可。
当然它们不是,您也必须计算它们,但这仍然不是需要停止的循环。相反,它是具有 anchor 的递归。对于每个递归步骤,值将变得越来越小,一旦它们达到低于2的值,您将返回0或1,而无需任何进一步递归。这是你的锚点。
可以将其视为“停止点”,但请注意,没有任何循环需要突破或类似。