尝试一:
# 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13
# 特别指出:第0项是0,第1项是第一个1。从第三项开始,每一项都等于前两项之和。
num = int(input(“How many items do you need?”))
if num == 0:
print(“0”)
elif num == 1:
print(“1”)
else:
a = []
a[0] = 0
a[1] = 1
for i in range(0, num + 1):
a[i] = a[i - 2] + a[i - 1]
print(a)
error:
How many items do you need?2
Traceback (most recent call last):
File “F:\PycharmWorkSpace\菜鸟教程,Python实例\9斐波那契数列.py”, line 11, in
a[0] = 0
IndexError: list assignment index out of range
分析:
空数组不能直接指定位置。
利用.append()试一下。
尝试二:
# 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13
# 特别指出:第0项是0,第1项是第一个1。从第三项开始,每一项都等于前两项之和。
num = int(input(“How many items do you need?”))
if num == 0:
print(“0”)
elif num == 1:
print(“1”)
else:
a = []
a.append(0)
a.append(1)
for i in range(2, num + 1):
a.append(a[i - 2] + a[i - 1])
print(a)
结果:
How many items do you need?10
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
思考:
# 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13
# 特别指出:第0项是0,第1项是第一个1。从第三项开始,每一项都等于前两项之和。
num = int(input(“How many items do you need?”))
if num == 0:
print(“0”)
elif num == 1:
print(“1”)
else:
a = []
a.append(0)
a.append(1)
for i in range(2, num + 1):
a[i] = a[i - 1] + a[i - 2]
a.append(a[i])
print(a)
error:
How many items do you need?10
Traceback (most recent call last):
File “F:\PycharmWorkSpace\菜鸟教程,Python实例\9斐波那契数列.py”, line 14, in
a[i] = a[i - 1] + a[i - 2]
IndexError: list assignment index out of range
知道啦!因为在执行a[i] = a[i - 1] + a[i - 2]时,列表a的长度还是2(两个元素,下标从0开始),a[2]实际上是第三个元素,不存在,只有在执行完.append()之后,才会创建第三个元素,即a[2]
递归生成斐波那契数列
# 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13
# 特别指出:第0项是0,第1项是第一个1。从第三项开始,每一项都等于前两项之和
def recurfibo(n):
“””递归生成斐波那契数列”””
_if n <= 1:
return n
else:<br /> return (recur_fibo(n - 1) + recur_fibo(n - 2))
item = int(input(“Please enter the items you want to show:”))
recur_fibo(item)
结果:
Please enter the items you want to show:10
Process finished with exit code 0
缺少打印的过程
在末尾加上:
for i in range(item):
print(recur_fibo(i))
F:\PycharmWorkSpace\菜鸟教程,Python实例\venv\Scripts\python.exe F:/Pycharm_WorkSpace/菜鸟教程,Python实例/9递归斐波那契数列.py
Please enter the items you want to show:10
0
1
1
2
3
5
8
13
21
34
Process finished with exit code 0
