- 一、顺序输出
- 二、利用递归函数实现
- 三、循环
- 四、利用列表实现
- 五、利用reduce实现
- 六、利用生成器实现
- 七、利用魔术方法实现
记录多种方法生成菲波那切数列
一、顺序输出
代码如下:
# 第一种方法 顺序输出
# 获取用户输入数据
num = int(input("你需要几项?"))
# 第一和第二项
n1 = 1
n2 = 1
count = 2
# 判断输入的值是否合法
if num <= 0:
print("请输入一个正整数。")
elif num == 1:
print("斐波那契数列:")
print(n1)
else:
print("斐波那契数列:")
print(n1, ",", n2, end=" , ")
while count < num:
nth = n1 + n2
print(nth, end=" , ")
# 更新值
n1 = n2
n2 = nth
count += 1
结果:
代码如下:
# 利用递归函数实现
def fib(x):
if x <= 2:
return 1
else:
return fib(x - 2) + fib(x - 1)
n=int(input('请输入n值:'))
for i in range(1, n+1):
print(fib(i), end=" , ")
结果:
代码如下:
def fib(number):
a = 1
b = 1
n=1
while n <= number: # 当斐波那契数小于等于number时结束循环
print(a, end=" ", )
a, b = b, a + b
n=n+1
fib(10)
结果:
代码如下:
# 利用列表实现
inputnum= int(input('请输入数值:'))
a = [1, 1]
for i in range(2, inputnum):
num = (a[i - 1] + a[i - 2])
a.append(num)
print(a)
结果:
代码如下:
# 利用reduce实现
from functools import reduce
def nihao(prev,b):
print(prev)
return [ prev[1],
prev[0] + prev[1] ]
def fib_reduce(n):
initial = [0, 1]
dummy = range(n)
fib_n = reduce(nihao,
dummy,
initial)
return fib_n[0]
(fib_reduce(10))
结果:
六、利用生成器实现
代码如下:
import sys
def fibonacci(n): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
while True:
try:
print(next(f), end=" ")
except StopIteration:
sys.exit()
结果:
【Python魔术方法】迭代器(iter__和__next):
代码如下:
class Person(object):
def __init__(self,xname):
self.name = xname
# 斐波拉契数列前两个值是固定
self.a ,self.b = 0,1
# person默认不是可迭代对象,变成一个可迭代对象,必须返回一个迭代器
def __iter__(self): # 生成一个斐波拉契数列
return self
# person就变成一个迭代器
def __next__(self):
self.a ,self.b = self.b, self.a+self.b # 计算下一个值
if self.a > 1000: # 如果出现一个大于1000的数字,退出循环
raise StopIteration
return self.a
if __name__ == '__main__':
p = Person('张三')
for n in p:
print(n)
结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)