我正在尝试使用递归函数来计算斐波那契数列。这是我的想法:
import sys
new_recursion_limit=3000
sys.setrecursionlimit(new_recursion_limit)
fibonacci_cache = {}
def fibonacci(n):
if n in fibonacci_cache:
return fibonacci_cache[n]
if n == 1:
return 1
else:
result = fibonacci(n - 1) + fibonacci(n - 2)
fibonacci_cache[n] = result
return result
number = int(input("Enter the number for fiboonacci value: "))
result = fibonacci(number)
print(f"The value of fibbonaci {number} is {result}")
我使用了chatGPT,以便我可以有一个基本的想法来实现该方法。我收到的错误是RecursionError:已超过最大递归深度。即使对于int 5,我也会收到这个错误。我是一个初学者在编程,我试图实现递归函数,使我有一个适当的想法有关的运作。有人能帮我解决这个错误吗?
当我收到错误时,我试图使用sys函数来设置递归限制。在这种情况下,重复是1000+。我希望递归函数能正常工作。但我仍然收到错误。
4条答案
按热度按时间brqmpdu11#
正如已经指出的,这里的核心问题是需要考虑两种特殊情况,
n == 1
和n == 0
。您可以在代码中这样做,但由于您是手动初始化缓存,因此您也可以在那里这样做。此时,您可以添加一个测试来确保
n >= 0
,如果不是,则抛出一个ValueError
,但我将把这个问题留给您考虑。pkln4tw62#
当您的代码到达
fibonacci(2)
的递归调用时,问题就出现了。在这个调用中,它将调用
fibonacci(1)
和fibonacci(0)
。在
fibonacci(1)
调用中,它将遇到if n == 1
条件,并以返回值1正确终止。但是
fibonacci(0)
调用并没有停止;它调用fibonacci(-1)
和fibonacci(-2)
。从那以后,负数就一直在增长。你需要考虑
n
为零的情况。axkjgtzd3#
假设
n=2
,你的函数中的else
会被满足,那么它面对fibonacci(n - 1) + fibonacci(n - 2)
,也就是fibonacci(1) + fibonacci(0)
。fibonacci(1)
是1,但是你没有为fibonacci(0)
提供任何东西,所以你的else也会被满足,你会得到fibonacci(-1) + fibonacci(-2)
,这将无限发生。因此,只需为
n=0
提供一个返回值:ua4mk5z44#
看看你的函数在接收到n=2时会做什么