我试图编写一个程序来查找给定的数字是否在Fibonacci序列中,并且我不断得到不会终止的递归,而且我不确定原因。 17号线似乎是个大问题。当我输入0或1时,我得到了所需的答案。只是寻求帮助得到答案,我试着学习,只是告诉我答案对我没什么帮助。
number = int(input("Enter your number:"))
def fib(n):
if n == 0 or n == 1:
return 1
else:
return (fib(n-1) + fib(n-2))
def isfib(number):
n = 0
if number < 0:
print("Invalid input")
elif number == fib(n):
print("Number is in the sequence")
elif number < fib(n):
print("Number is not in the sequence")
elif number > fib(n):
n = n +1
isfib(number) #where the problem occurs
isfib(number)
答案 0 :(得分:1)
有很多小错误,所以我纠正了这些错误(我已经添加了一个更简单的添加更好的Fibonacci代码实现):
number = int(input("Enter your number:"))
def fib(n):
if n == 0 or n == 1: return 1
else:
temp1=1
temp=2
temp3=0
for z in range(n-2):
temp3=temp
temp+=temp1
temp1=temp3
return temp
def isfib(number): #it is ok not to return anything unless you need to stop the function in between
done=0
n=0
while done!=1:
if number < 0:
print("Invalid input")
done=1
elif number == fib(n):
print("Number is in the sequence")
done=1
elif number < fib(n):
print("Number is not in the sequence")
done=1
elif number > fib(n):
n = n +1
#i have used done instead of return to show the function can exit even if you dont return a value
#you can just 'return' instead of changing done variable and making the loop infinite
isfib(number)
由于你已经使用了很多递归,我猜你只想通过使用递归来做到这一点。所以,代码将是这样的: number = int(输入(“输入你的号码:”))
def fib(n):
if n == 0 or n == 1: return 1
else: return (fib(n-1) + fib(n-2))
def isfib(number,n=0):
if number < 0: print("Invalid input")
elif number == fib(n): print("Number is in the sequence")
elif number < fib(n): print("Number is not in the sequence")
elif number > fib(n):
n = n +1
isfib(number,n)
isfib(number)
当然经过测试,它有效(但我不会这样推荐:D)
答案 1 :(得分:0)
您的fib功能错误(其中一个术语应为n-2)
答案 2 :(得分:0)
isfib()函数的最后一个elif没有返回自己的调用,即它调用自身而不对该结果做任何事情。
答案 3 :(得分:0)
简单地说,你调用的isfib(数字)与你原来给出的数字完全相同。你之前的“n = n + 1”表明你可能想要调用isfib(n)而不是isfib(数字)。
基本上isfib(数字)只是一个无限循环。
答案 4 :(得分:0)
我真的不知道你为什么要使用递归来解决这个问题。获得号码后,您就不知道n-1
和n-2
是什么。因此,您无法在n-1
和n-2
上进行递归。以下示例可以轻松检查数字是否为Fibonacci序列:
number = int(input("Enter your number:"))
def fib(n):
ni = 1
ni_minus_1 = 0
while ni + ni_minus_1 < n:
temp = ni_minus_1
ni_minus_1 = ni
ni = ni + temp
if ni + ni_minus_1 == n:
return True
return False
print(fib(number))
更新
我想你想通过递归来构建序列。例如,给定的数字是5,您想要返回Fibonacci序列中的第5个元素。然后代码如下:
def build_fib(n):
if n == 0:
return 0
if n == 1:
return 1
return build_fib(n-1) + build_fib(n-2)
print(build_fib(6))