给定正整数,确定它是否是某些n的第n个斐波那契数

时间:2018-04-09 09:36:03

标签: python-3.x fibonacci

我试图找出某个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`

1 个答案:

答案 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)