Python如何停止自身的递归?

时间:2019-02-13 08:52:08

标签: python recurrence

假设我按照(显然效率不高的)递归算法来计算斐波那契数列:

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循环。

1 个答案:

答案 0 :(得分:2)

它是功能性的,因此不会运行,因此也不会 stop 。您(仍)在考虑迭代编程,并在此处假设需要某种时间停止的某种循环。事实并非如此。

在此范式中,您只是声明返回值 是前两个数字的和。此时,您无需关心先前数字的产生方式,只需假设它们已经存在即可。

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

可以将其视为“停止点”,但请注意,没有任何循环需要突破或类似。