递归函数与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是一个函数

原文地址:https://www.cnblogs.com/khal-Cgg/p/5850368.html