700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python输入整数n 求斐波拉契数列第n个数

Python输入整数n 求斐波拉契数列第n个数

时间:2018-07-11 11:07:15

相关推荐

Python输入整数n 求斐波拉契数列第n个数

递归方法:

# 输入整数n,求斐波拉契数列第n个数。# 思路:# 递归式算法:# 利用f(n) = f(n-1) + f(n-2)的特性来进行递归def fn(n):if n==0:return 0if n==1:return 1return fn(n-1)+fn(n-2)print('fn(10):',fn(10),' fn(3):',fn(3),' fn(2):',fn(2))

非递归方法:

将b赋给a 将(a+b)赋给b b为最终结果f(0) f(1) f(2) f(3) f(4) f(5)...ab (a+b)a ba b....

def fib(n):#c表示循环次数 a表示fib(0)=0,b表示fib(1)=1c,a,b=0,0,1if(n==0):b=0while(c<(n-1)):a,b = b,a+bc=c+1print(b)return (b)for x in range(10):fib(x)

如下结果是显示fib(0)到fib(9),如果只需从fib(1)开始,上述代码fib修改为fib(x+1)

0 fib(0)

1 fib(1)

1

2

3

5

8

13

21

34

函数改成generator在循环过程中不断调用yield,就会不断中断。当然要给循环设置一个条件来退出循环,不然就会产生一个无限数列出来。

同样的,把函数改成generator后,我们基本上从来不会用next()来获取下一个返回值,而是直接使用for循环来迭代:

def fib(num):c,a,b=0,0,1#c表示循环次数 a表示fib(0)=0,b表示fib(1)=1if num==0:b=0yield bwhile(c<num):yield ba,b=b,a+b #t=(a,a+b) a=t(0) b=t(1)c=c+1for x in fib(6): #输出前6个斐波拉数print(x)# 1, 1, 2, 3, 5, 8, 13

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。