递归函数在调用 return 时无限运行



我创建了一个基本的python函数来递归打印斐波那契的数字。但是,在打印所有数字后,它继续无限打印 0

我尝试使用 return 关键字并在之前放置一个 if 语句来检查变量是否大于应有的大小,但它仍然不起作用

class RecFibonnacci:
def recFib(self, firstTerm, secondTerm):
Fterm = firstTerm
Sterm = secondTerm
if Fterm <= 1000:
print(Fterm)
tempStrg = Fterm
Sterm += Fterm
Fterm = tempStrg
self.recFib(Fterm, Sterm)
return
if __name__ == '__main__':
recFibonacci = RecFibonnacci()
recFibonacci.recFib(0, 1)

它应该打印从 1-987 的所有斐波那契数。 它打印它们,但之后,它永远打印 0

虽然其他答案可能会产生工作代码,但您需要了解您尝试执行的操作等同于

def recFib(self, firstTerm, secondTerm):
if firstTerm <= 1000:
print(firstTerm)
self.recFib(secondTerm, firstTerm + secondTerm)
return

你的代码很好,除了一个小错误是——

你的变量Fterm是

first(前一项(值,Sterm是second(first+second(,你用这个调用函数self.recFib(Fterm,Sterm(;

但是发生的事情是在递归调用变量 Fterm 时采用其旧值,而不是更新的值! 因为它显然未能超过 1000。 因此,你可以做两件事——

修改 1

Fterm = firstTerm
Sterm = secondTerm
if Fterm<= 1000:            
print(Fterm)
#updating first variable, and second as well (first+second)
self.recFib(Sterm, Sterm+Fterm)
return

修改 2

if Fterm <= 1000:           
print(Fterm)
tempStrg = Fterm
Sterm += Fterm
Fterm = tempStrg
# passing second as first, and first as second
self.recFib(Sterm, Fterm)
return

实际上,这是一个很好的代码,除了一个小错误。 您应该替换该行

tempStrg = Fterm

与线

tempStrg = Sterm

我认为tempStrg = Fterm应该改为tempStrg = Sterm.这是因为如果将Fterm分配给tempStrgFterm保持在 0。这是因为第一个术语Fterm永远不会增加。原因如下:tempStrg = Fterm使该值为0。然后,如果您将Fterm更改为该值,它仍然是零。这就是为什么它总是永远输出 0。这是代码中的一个小错误。

最新更新