1.递归函数

1.1来个例子

 def f(n):
if n == 1:
return 1
return n * f(n-1)
print(f(5))

结果为:120 即5的阶乘

通过这个例子来看递归函数有着两个特点

(1)调用自己

(2)结束条件(在赋值最后一项的时候同时shutdown)

2.fibonacii数列

fibonacci数列形式 0 1 1 2 3 5 8 13 21 34.。。。

2.1函数实现

 def fibo(n):
if n <= 1:
return n
return fibo(n-1)+fibo(n-2)
print(fibo(5))

这里的数列是从第0项开始算的,所以第五项是5

2.2循环实现

 a = 0
b = 1
for i in range(8):
b,a = a+b,b
# c = b
# b =a +b
# a = c
print(b)

上述代码中的

b,a = a+b,b

不是在先赋值b再赋值a的意思而是转换过程相当于注释中的内容。

2.3递归效率

递归函数相当于1000辆车在高速上堵车,第一辆车在抛锚的时候必须等到第一千辆车停止才会修好。而结果出来的时候相当于第一千辆车在此启动的时候。

3.重要的内置函数

3.1filter

 a = ["d","dd","s"]
def f(s):
if s != "s":
return s
ret = filter(f,a)
print(ret)

结果为

 <filter object at 0x000002092077F470>
['d', 'dd']

可以看到返回值为一个filter object的类型,是一个可迭代器,显示需要转换类型或者遍历。

3.2map

 a = ["d","dd","s"]
def f2(s):
return s + "gagaga"
ret2 = map(f2,a)
print(ret2)
print(list(ret2))

结果为

<map object at 0x00000277FBDCF470>
['dgagaga', 'ddgagaga', 'sgagaga']

3.3reduce

 from functools import reduce
def ji(x,y):
return x + y
print(reduce(ji,range(1,101)))

结果

5050 实现的结果是前100项的和。注意这里reduce返回的值是一个数。运算模式相当于将前两个数处理结果和下一个数处理。

3.4lambda

 print(list(map(lambda x:x*x,[1,2,3,4])))

结果为

[1,4,9,16]

lambda是一个匿名函数,即没有名字。存在的意义在你想做一件很简单的操作但是用函数太麻烦,就利用lambda做成一行避免污染内存。

 a = lambda x,y:x*y
print(a(2,3))

此段代码明显地表明了lambda是一个函数

递归函数与fibonacci的更多相关文章

  1. Javascript函数式编程要掌握的知识点讲解

    一:理解call和apply 及arguments.callee ECMAScript3给Function的原型定义了两个方法,他们是Function.prototype.call 和 Functio ...

  2. 几年前做家教写的C教程(之三专讲了递归和斐波那契)

    C语言学习宝典(3) 数组: 一维数组的定义: 类型说明符  数组名[常量表达式] 例如: int  a[10]; 说明:(1)数组名的命名规则和变量名相同,遵循标示符命名规则 (2)在定义数组时需要 ...

  3. bat脚本-set(setlocal enabledelayedexpansion) 学习

    设置本地为延迟扩展.其实也就是:延迟变量,全称延迟环境变量扩展. 事件一: @echo off set a=4 set a=5&echo %a% pause 解说:为什么是4而不是5呢?在ec ...

  4. Web Worker无阻塞UI的牛逼技术,html5,可惜无法敢于UI

    众所周知,JavaScript是单线程的,JS和UI更新共享同一个进程的部分原因是它们之间互访频繁,但由于共享同一个进程也就会造成js代码在运行的时候用户点击界面元素而没有任何响应这样的情况,这么糟糕 ...

  5. Web开发——JavaScript基础

    参考学习: MDN JavaScript:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript ECMAScript 6入门(阮一峰):htt ...

  6. C++函数部分总结

    目录 为什么要使用函数 为什么要用函数重载 C++传参方式 特殊的函数--递归函数 为什么要使用函数 使用函数可以将一个比较复杂的程序系统的分为若干块简洁的模块,使程序更加清晰明了 比如,我们想要模拟 ...

  7. 递归函数练习:输出菲波拉契(Fibonacci)数列的前N项数据

    /*====================================================================== 著名的菲波拉契(Fibonacci)数列,其第一项为0 ...

  8. #26 fibonacci seqs

    Difficulty: Easy Topic: Fibonacci seqs Write a function which returns the first X fibonacci numbers. ...

  9. 斐波那契(Fibonacci)数列的几种计算机解法

    题目:斐波那契数列,又称黄金分割数列(F(n+1)/F(n)的极限是1:1.618,即黄金分割率),指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.…….在数学上,斐波纳契数列以如下 ...

随机推荐

  1. html表单应用

    <!DOCTYPE html> <html> <head> <meta name="generator" content="HT ...

  2. ZOJ2332 Gems(最大流)

    题目大概说,alsomagic有宝石,宝石有颜色和形状两个属性:他有一种法力可以将某些颜色形状的宝石转化成另一种颜色形状的宝石:他的女朋友对各个颜色都有一定的容忍数量,而他自己也对各个形状都有一定的容 ...

  3. LightOJ1037 Agent 47(状压DP)

    dp[S]表示已经消灭目标集合为S的最少射击数 dp[0]=0 dp[S]=min( dp[S'] + min( health[i] , health[i]/demage[j][i] ) )  其中S ...

  4. CentOS6.4 安装Nagios 并监控端口

    1.下载所需文件nagios-3.4.3.tar.gz,nagios-plugins-1.4.15.tar.gz,nrpe-2.14.tar.gz,sendEmail-v1.56.tar.gz 下载地 ...

  5. HDU 4614 Vases and Flowers(线段树+二分)

    题目链接 比赛的时候一直想用树状数组,但是树状数组区间更新之后,功能有局限性.线段树中的lz标记很强大,这个题的题意也挺纠结的. k = 1时,从a开始,插b个花,输出第一个插的位置,最后一个的位置, ...

  6. oracle系列--第六篇 Oracle上面小试牛刀

    现在我们可以在oracle上面进行创建表,向表中插入数据,修改表中数据,删除数据,甚至删除表等一系列操作. 即我们所说的CRUD操作. --create a table which name is t ...

  7. Hibernate工作原理及为什么要用?

    Hibernate工作原理及为什么要用? 原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.x ...

  8. Resume简历中装B的词汇总结大全

    1. Accelerated 35. Empowered 69. Motivated 2. Accomplished 36. Enabled 70. Negotiated 3. Achieved 37 ...

  9. shell 循环

    for循环: 批量删除.gz结尾的文件: 循环打包文件并备份到一个目录下面: find ./ -maxdepth 1 -name "*.gz" find ./ -maxdepth ...

  10. javascript判断非空

    /* *判断非空 * */ function isEmpty(val){ if(val == null)return true; if(val == undefined || val == 'unde ...