求斐波那契数列的第 n 个数

Find the nth number of fibonacci sequence

我有这个代码,input_number = 10。我必须制作一个 fibonacci 序列,条件为:fibo[-2] < input_number < fibo[-1]

def fibonacci(input_number):
  a = 0
  b = 1
  fibo=[a, b]
  while b < input_number:
    a, b = b, a+b
    fibo.append(b)
    print(fibo)

结果是这样的,正如我所料:

[0, 1, 1]
[0, 1, 1, 2]
[0, 1, 1, 2, 3]
[0, 1, 1, 2, 3, 5]
[0, 1, 1, 2, 3, 5, 8]
[0, 1, 1, 2, 3, 5, 8, 13]

但现在的问题是我想调用最后一个斐波那契数 13,输出应该是 "The last fibonacci number is 13 and it is the 8th fibonacci number"。但是我不能调用 13 的数字,因为它是一个整数而不是一个列表。

如何将其转换为列表?

fibo 是包含您所有值的列表。要获取列表的最后一个值,您可以通过 -1 对其进行索引,因此 fibo[-1]。然后我们可以通过获取列表的长度 len(fibo).

来确定哪个斐波那契数 fibo[-1]

我不会为你写出完整的答案,但把这个

print("fibo[-1]==",fibo[-1], " len(fibo)==", len(fibo))

在 while 循环之外,我想你可以从那里弄明白。

您可能只需要访问 fibo 数组的语法。希望以下内容有所帮助:

def fibonacci(input_number):
    a = 0
    b = 1
    fibo = [a, b]
    while b < input_number:
        a, b = b, a + b
        fibo.append(b)
        print(fibo)

    print(f'fibonacci number {len(fibo)} is {fibo[len(fibo) - 1]}')
    print('===')
    i = 0
    while i < len(fibo):
       print(f'fibonacci number {i + 1} is {fibo[i]}')
       i += 1

fibonacci(10)

结果:

[0, 1, 1]
[0, 1, 1, 2]
[0, 1, 1, 2, 3]
[0, 1, 1, 2, 3, 5]
[0, 1, 1, 2, 3, 5, 8]
[0, 1, 1, 2, 3, 5, 8, 13]
fibonacci number 8 is 13
===
fibonacci number 1 is 0
fibonacci number 2 is 1
fibonacci number 3 is 1
fibonacci number 4 is 2
fibonacci number 5 is 3
fibonacci number 6 is 5
fibonacci number 7 is 8
fibonacci number 8 is 13

前面的代码时间复杂度都比较大

但是,如果我们考虑 pow() 或 ** 和 sqrt() 函数在恒定时间内工作,则有另一种在恒定时间内执行此操作的方法。

考虑采用以下格式的系列 => 0、1、1、2、3、5、8、13、21、34、55、89、144、...

其中,
0 ----> 第 0 个斐波那契数
1 ----> 第 1 个斐波那契数
1 ----> 第 2 个斐波那契数
2 ----> 第 3 个斐波那契数
3 ----> 第 4 个斐波那契数
5 ----> 第 5 个斐波那契数

计算常数time/O(1)中的第n个斐波那契数的数学公式是:

python 代码应该是这样的:

from math import sqrt

# n defines the nth fibonacci number
n = 5

def fib(n):
    p = ( 1 + sqrt(5) ) / 2
    q = ( 1 - sqrt(5) ) / 2
    return int((p**n-q**n) / sqrt(5)) 
    # to counter float value from the division operator int is used

print(fib(n))

输入:

5

输出:

5