我创建了一个基本的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
分配给tempStrg
,Fterm
保持在 0。这是因为第一个术语Fterm
永远不会增加。原因如下:tempStrg = Fterm
使该值为0。然后,如果您将Fterm
更改为该值,它仍然是零。这就是为什么它总是永远输出 0。这是代码中的一个小错误。