求助:如何修改递归实现的Fibonacci函数使其序列以0开头?
修正后的递归斐波那契函数(以0开头)
你的核心问题是基准条件不符合0开头的序列规则:原函数中n=1和n=2都返回1,对应序列是1,1,2,3...,但目标序列起始为0,1,1,2...,只需调整基准条件即可解决:
def fibonacci(n): # 基准条件:n=1返回0,n=2返回1,匹配起始序列0,1 if n == 1: return 0 elif n == 2: return 1 # 递归逻辑:第n项等于前两项之和 return fibonacci(n - 1) + fibonacci(n - 2) n = int(input("n = ")) print(fibonacci(n))
验证示例
- 输入
5:fibonacci(5) = fibonacci(4) + fibonacci(3)fibonacci(4) = fibonacci(3) + fibonacci(2) = 1 + 1 = 2fibonacci(3) = fibonacci(2) + fibonacci(1) = 1 + 0 = 1- 最终结果:
2 + 1 = 3,符合要求
- 输入
6:fibonacci(6) = fibonacci(5) + fibonacci(4) = 3 + 2 = 5,符合要求
额外优化提示
原生递归会存在大量重复计算(比如计算fibonacci(5)时会重复计算fibonacci(3)),如果需要处理较大的n,可以用记忆化递归减少重复运算:
# 用字典缓存已计算的结果,避免重复递归 memo = {1: 0, 2: 1} def fibonacci(n): if n in memo: return memo[n] result = fibonacci(n - 1) + fibonacci(n - 2) memo[n] = result return result n = int(input("n = ")) print(fibonacci(n))
内容的提问来源于stack exchange,提问作者user19401771
相关产品推荐
相关产品推荐

