求斐波那契数列的第 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
我有这个代码,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)
.
我不会为你写出完整的答案,但把这个
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