Python递归实现斐波那契数列遇RecursionError求助
递归斐波那契数列触发RecursionError的原因及解决办法
问题原因
你的递归函数缺少关键的边界条件处理:
- 当前代码只定义了
n == 1时返回1,但计算fibonacci(2)时,会执行fibonacci(1) + fibonacci(0); fibonacci(0)会进入else分支,调用fibonacci(-1) + fibonacci(-2),以此类推,递归会不断向负数方向延伸,形成无限递归,最终触发RecursionError,哪怕输入5这种小数字也会出问题。
解决办法
根据斐波那契数列的常规定义,补充对应的边界条件即可。常见的两种定义方式及修正代码如下:
方式1:定义F(1)=1,F(2)=1
修改函数,增加n == 2的判断:
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]
# 补充n=2的边界条件
if n == 1 or n == 2:
return 1
else:
result = fibonacci(n - 1) + fibonacci(n - 2)
fibonacci_cache[n] = result
return result
number = int(input("Enter the number for fibonacci value: "))
result = fibonacci(number)
print(f"The value of fibonacci {number} is {result}")
方式2:定义F(0)=0,F(1)=1
如果需要支持从0开始的斐波那契数列,修改边界条件为:
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]
# 补充n=0的边界条件
if n == 0:
return 0
elif 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 fibonacci value: "))
result = fibonacci(number)
print(f"The value of fibonacci {number} is {result}")
额外建议:可以在函数开头增加输入合法性判断,避免用户输入负数导致的递归问题:
def fibonacci(n):
if not isinstance(n, int) or n < 0:
raise ValueError("n must be a non-negative integer")
# 后续逻辑...
内容的提问来源于stack exchange,提问作者Harikrishnan Venugopal




