【问题标题】:Creating a function that provides the greatest Fibonacci number that is less than or equal to 'n'?创建一个提供小于或等于“n”的最大斐波那契数的函数?
【发布时间】:2018-07-10 20:50:28
【问题描述】:

我正在尝试创建一个函数,该函数接受输入“n”并提供小于或等于“n”的最高斐波那契数的输出。例如,如果 n = 5,则输出为 5。如果 n = 6,则输出为 5。

我的解决方案是可行的,但它似乎并不“有效”,我正在寻找一种替代方法。这是我所做的:

def fib(n):

    if n<0:
        print("Invalid input")
    x , y = 0 , 1
    while x <= n:
        x , y = y , y + x
    return abs(x-y)

我不认为使用 abs(x-y) 似乎很有效,所以我想问一下是否有人有不同的方法来解决这个问题。谢谢。

【问题讨论】:

  • 你为什么觉得abs(x-y)效率不高?
  • 你很难找到比abs更有效的非平凡函数。
  • @ArdaArslan:我们正在寻找斐波那契数,而不是素数。
  • @ArdaArslan 谁说过素数?
  • 既然y总是大于x,那么完全不使用abs会更有效。

标签: python python-3.x fibonacci


【解决方案1】:
def fib(n):
    if n<0:
        print("Invalid input")
    x , y = 0 , 1
    while x <= n:
        x , y = y , y + x
    return y - x

【讨论】:

    【解决方案2】:

    您的问题的这个解决方案

    def fib(n):
        x, y = 0, 1
        while True:
            x, y = y , x + y
            if x > n:
                return y-x
    

    这样你就会得到正确的答案

    【讨论】:

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