【问题标题】:Given a positive integer, determine if it's the nth Fibonacci number for some n给定一个正整数,确定它是否是某个 n 的第 n 个斐波那契数
【发布时间】:2018-04-09 09:36:03
【问题描述】:

我试图找出某个斐波那契数的索引。但是我的程序在输入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`

【问题讨论】:

  • python 解释器从不响应Your program took too long to execute... 你想在哪里运行它?你尝试过什么来加快你的程序?
  • @hiroprotagonist 这是num_prev, num = num, num + num_prev,而不是num = num。这是一个元组赋值。 OP 我希望您了解在操作员周围放置空间的重要性。
  • @FHTMitchell 哎呀,你是对的;这些是逗号,而不是分号(无论如何这将是一个语法错误)。我的错。已删除评论。
  • 谢谢亲爱的朋友们。我正在使用 repl.it 在线做一些练习。我知道有几种方法可以解决这个问题。

标签: python-3.x fibonacci


【解决方案1】:

谢谢你们。最后一段代码的问题是:如果这个数不是斐波那契数,同时又太大,计算需要很多循环。当我使用网络编译器进行计算时,它们不允许这样的“无限”循环运行。然后我使用数学方法来限制循环。

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)

【讨论】:

    猜你喜欢
    • 2022-12-10
    • 1970-01-01
    • 2012-10-12
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多