【发布时间】:2020-11-24 23:38:18
【问题描述】:
就是代码(我用的是python 3):
def fibonacci(x):
if x == 1 or 2:
return 1
f = fibonaci(x-1) + fibonaci(x-2)
return f
print(fibonacci(4))
我想得到的输出是 3,这是第四个斐波那契数。但是我得到 1 作为输出。
f = fibonaci(x-1) + fibonaci(x-2)
我认为该代码没有做我希望它做的事情。假设我会将fibonacci(3) 作为我的输入。
我认为应该发生的事情:
f = fibonacci(3-1) + fibonacci(3-2)
fibonacci(3-1) 和 fibonacci(3-2) 都应该返回 1 对吗?所以f 应该是 = 2
fibonacci(3) 应该给我 2 作为输出。但我得到的输出仍然是 1。
哪里错了?
【问题讨论】:
-
x == 1 or 2始终为真。 -
f = fibonaci(x-1) + fibonaci(x-2)==>f = fibonacci(x-1) + fibonacci(x-2)这是一件很慢的事情 -
@PatrickArtner 是的,我现在也看到了,谢谢。慢是指代码可以更有效地编写吗?我刚接触递归,也许我将来可以更聪明地写它:D
-
不要递归。使用没有来自stackoverflow.com/a/499245/7505395的递归的线性版本 - 它更快,更不容易出错。用 fibonaci(100) 试试你的 - 线性版本需要不到 1 秒的时间来给你所有的数字......
-
也会检查一下,谢谢!我被指派通过递归来完成这项任务,只是为了练习。
标签: python function recursion output fibonacci