递归函数与fibonacci
Posted gege4105
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归函数与fibonacci相关的知识,希望对你有一定的参考价值。
1.递归函数
1.1来个例子
1 def f(n): 2 if n == 1: 3 return 1 4 return n * f(n-1) 5 print(f(5))
结果为:120 即5的阶乘
通过这个例子来看递归函数有着两个特点
(1)调用自己
(2)结束条件(在赋值最后一项的时候同时shutdown)
2.fibonacii数列
fibonacci数列形式 0 1 1 2 3 5 8 13 21 34.。。。
2.1函数实现
1 def fibo(n): 2 if n <= 1: 3 return n 4 return fibo(n-1)+fibo(n-2) 5 print(fibo(5))
这里的数列是从第0项开始算的,所以第五项是5
2.2循环实现
1 a = 0 2 b = 1 3 for i in range(8): 4 b,a = a+b,b 5 # c = b 6 # b =a +b 7 # a = c 8 print(b)
上述代码中的
b,a = a+b,b
不是在先赋值b再赋值a的意思而是转换过程相当于注释中的内容。
2.3递归效率
递归函数相当于1000辆车在高速上堵车,第一辆车在抛锚的时候必须等到第一千辆车停止才会修好。而结果出来的时候相当于第一千辆车在此启动的时候。
3.重要的内置函数
3.1filter
1 a = ["d","dd","s"] 2 def f(s): 3 if s != "s": 4 return s 5 ret = filter(f,a) 6 print(ret)
结果为
1 <filter object at 0x000002092077F470> 2 [‘d‘, ‘dd‘]
可以看到返回值为一个filter object的类型,是一个可迭代器,显示需要转换类型或者遍历。
3.2map
1 a = ["d","dd","s"] 2 def f2(s): 3 return s + "gagaga" 4 ret2 = map(f2,a) 5 print(ret2) 6 print(list(ret2))
结果为
<map object at 0x00000277FBDCF470> [‘dgagaga‘, ‘ddgagaga‘, ‘sgagaga‘]
3.3reduce
1 from functools import reduce 2 def ji(x,y): 3 return x + y 4 print(reduce(ji,range(1,101)))
结果
5050 实现的结果是前100项的和。注意这里reduce返回的值是一个数。运算模式相当于将前两个数处理结果和下一个数处理。
3.4lambda
1 print(list(map(lambda x:x*x,[1,2,3,4])))
结果为
[1,4,9,16]
lambda是一个匿名函数,即没有名字。存在的意义在你想做一件很简单的操作但是用函数太麻烦,就利用lambda做成一行避免污染内存。
1 a = lambda x,y:x*y 2 print(a(2,3))
此段代码明显地表明了lambda是一个函数
以上是关于递归函数与fibonacci的主要内容,如果未能解决你的问题,请参考以下文章
C语言:采用递归调用函数方法计算Fibonacci数列的前20项