我试图找出某个Fibonacci数的索引。然而,我的程序返回给我这个结果"你的程序执行时间太长。检查代码是否存在无限循环或额外的输入请求"输入1134903171
后。
num = 1
num_prev = 1
n = int(input())
i = 1
if n < 2:
print(1, 2)
else:
while i <= n + 2:
num_prev, num = num, num + num_prev
i += 1
if n == num:
print(i + 1)
break
elif i == n + 3:
print(-1)
#break`
答案 0 :(得分:0)
谢谢你们。最后一个代码的问题是:如果数字不是斐波那契数,同时它太大,那么计算将需要很多循环。当我使用网络编译器进行计算时,他们不允许这样的&#34;无穷大&#34;循环操作。然后我使用数学方法来限制循环。
import math
N=int(input())
root1=math.sqrt(5*N*N+4)
root2=math.sqrt(5*N*N-4)
i=1
num, num_prev = 1, 1
if root1%1==0 or root2%1==0:
while i <= N+2:
num_prev,num = num,(num+num_prev)
i+=1
if N==num:
print(i+1)
break
else:
print(-1)
But the best answer could be:
prev, next = 1, 1
index = 2
possible_fib = int(input())
while possible_fib > next:
prev, next = next, prev + next
index += 1
if possible_fib == next:
print(index)
else:
print(-1)