递归方法:
# 输入整数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