我正在尝试构建一个函数,该函数将接受一个数字,然后使用递归打印出一个斐波那契序列,并在该数字上结束该序列。因此,如果我有一个从0
开始的序列,并且1
如果用户输入是4
,它将返回0
,1
,1
,2
,3
。我得到这个RecursionError
:
RecursionError: maximum recursion depth exceeded while calling a Python object
这是我的代码:
num = input("Give me a number.")
def fib(n):
n = int(n)
if n == 0:
return 1
return fib(n - 1) + fib(n - 2)
print(fib(num))
两个问题
您的代码有两个问题:
RecursionError
异常无限循环
请尝试下面的代码。我刚刚添加了
n==1
作为另一个停止条件定义要求使用
f(1)=1
的大小写(参见here)。或者只是调试代码,您会意识到循环永远不会以
fib(1)
结束,因为它返回:f(1-1) + f(1-2)
>&燃气轮机&燃气轮机f(0) + f(-1)
>&燃气轮机&燃气轮机1 + infinite loop
打印所有术语
您可以尝试在递归代码中使用列表,这很难做到,或者可能会更改为带有循环的版本
带循环:
递归:
试试所有这些例子here
对
fib
的第二个调用就是问题所在。通过基本情况(退出条件)并继续无止境地递归。这将生成递归错误发生错误是因为您对斐波那契使用了错误的规则。。。规则说初始数字是1和2,但您编写的代码是从0开始的。更改您的代码:
相关问题 更多 >
编程相关推荐