【问题标题】:Calculate Fibonacci numbers up to at least n计算斐波那契数至少 n
【发布时间】:2017-03-05 18:39:33
【问题描述】:

我正在尝试创建一个允许用户输入数字的函数,结果将是一个列表,其中包含直到输入的斐波那契数字,如果输入不在系列中,则包含上面的一个。例如,4 的输入将返回[0, 1, 1, 2, 3, 5],但3 的输入将返回[0, 1, 1, 2, 3]。我已经设法使用以下功能做到这一点:

    def fibonacci(n):
        series = [0]
        if (n == 0):
            pass
        else:
            series.append(1)
            if (n == 1):
                pass
            else:
                while(series[len(series)-1] < n):
                    newValue = series[len(series)-1] + series[len(series)-2]
                    series.append(newValue)
        print(series)

但是,我现在希望能够递归地执行此操作,有什么想法吗?

【问题讨论】:

  • 递归斐波那契写起来很简单,你的尝试在哪里?
  • 没有记忆,递归斐波那契在你达到第 50 个斐波那契数之前变得不可行。

标签: python list recursion fibonacci


【解决方案1】:

一个可能的解决方案如下

def fibo_up_to(n):
    if n < 2:
        return [1,1]
    else:
        L = fibo_up_to(n-1)
        if L[-1] < n:
            L.append(L[-1] + L[-2])
        return L

这个想法是,要返回小于n 的所有斐波那契数的列表,您可以请求小于n-1 的列表,然后可能只添加一个元素。如果我们将前两个数字定义为[1, 1],这将从 2 开始起作用。使用[0, 1] 反而会给 2 带来问题,因为单个 next 元素是不够的。

这段代码在时间上并不是效率低下(斐波那契是双递归,这是一个简单的递归),但是使用了大量的堆栈空间。

【讨论】:

    【解决方案2】:
     def calculate_fibonnaci(n):
         if n == 0:
             return 0
         if n == 1:
             return 1
         else:
             return calculate_fibonnaci(n - 1) + calculate_fibonnaci(n - 2)
    

    这是一个使用递归函数的简单解决方案。

    【讨论】:

      猜你喜欢
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 1970-01-01
      • 2013-02-23
      • 2022-12-10
      • 2016-12-11
      • 2020-04-02
      相关资源
      最近更新 更多