递归函数与fibonacci
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的更多相关文章
- Javascript函数式编程要掌握的知识点讲解
一:理解call和apply 及arguments.callee ECMAScript3给Function的原型定义了两个方法,他们是Function.prototype.call 和 Functio ...
- 几年前做家教写的C教程(之三专讲了递归和斐波那契)
C语言学习宝典(3) 数组: 一维数组的定义: 类型说明符 数组名[常量表达式] 例如: int a[10]; 说明:(1)数组名的命名规则和变量名相同,遵循标示符命名规则 (2)在定义数组时需要 ...
- bat脚本-set(setlocal enabledelayedexpansion) 学习
设置本地为延迟扩展.其实也就是:延迟变量,全称延迟环境变量扩展. 事件一: @echo off set a=4 set a=5&echo %a% pause 解说:为什么是4而不是5呢?在ec ...
- Web Worker无阻塞UI的牛逼技术,html5,可惜无法敢于UI
众所周知,JavaScript是单线程的,JS和UI更新共享同一个进程的部分原因是它们之间互访频繁,但由于共享同一个进程也就会造成js代码在运行的时候用户点击界面元素而没有任何响应这样的情况,这么糟糕 ...
- Web开发——JavaScript基础
参考学习: MDN JavaScript:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript ECMAScript 6入门(阮一峰):htt ...
- C++函数部分总结
目录 为什么要使用函数 为什么要用函数重载 C++传参方式 特殊的函数--递归函数 为什么要使用函数 使用函数可以将一个比较复杂的程序系统的分为若干块简洁的模块,使程序更加清晰明了 比如,我们想要模拟 ...
- 递归函数练习:输出菲波拉契(Fibonacci)数列的前N项数据
/*====================================================================== 著名的菲波拉契(Fibonacci)数列,其第一项为0 ...
- #26 fibonacci seqs
Difficulty: Easy Topic: Fibonacci seqs Write a function which returns the first X fibonacci numbers. ...
- 斐波那契(Fibonacci)数列的几种计算机解法
题目:斐波那契数列,又称黄金分割数列(F(n+1)/F(n)的极限是1:1.618,即黄金分割率),指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.…….在数学上,斐波纳契数列以如下 ...
随机推荐
- Linq使用Distinct删除重复数据时如何指定所要依据的成员属性zz
最近项目中在用Linq Distinct想要将重复的资料去除时,发现它跟Any之类的方法有点不太一样,不能很直觉的在呼叫时直接带入重复数据判断的处理逻辑,所以当我们要用某个成员属性做重复数据的判断时, ...
- Open the Lock[HDU1195]
Open the Lock Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- TYVJ P1063 数字串 Label:双指针 线性扫描
描述 给你一个长度为n的数字串,数字串里会包含1-m这些数字.如果连续的一段数字子串包含了1-m这些数字,则称这个数字字串为NUM串.你的任务是求出长度最短的NUM串是什么,只需要输出这个长度即可.1 ...
- TYVJ P1023 奶牛的锻炼 Label:dp
背景 USACO 描述 奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息.若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0).若她在第i分钟休息,则疲倦程度减少1.无论何时 ...
- 【BZOJ】1221: [HNOI2001] 软件开发(最小费用最大流)
http://www.lydsy.com/JudgeOnline/problem.php?id=1221 先吐槽一下,数组依旧开小了RE:在spfa中用了memset和<queue>的版本 ...
- Chromium源码--视频播放流程分析(WebMediaPlayerImpl解析)
转载请注明出处:http://www.cnblogs.com/fangkm/p/3797278.html 承接上一篇文章.媒体播放,需要指定一个源文件,html5用URL格式来指定视频源文件地址,可以 ...
- HDU 4632 Palindrome subsequence(DP)
题目链接 做的我很无奈,当时思路很乱,慌乱之中,起了一个想法,可以做,但是需要优化.尼玛,思路跑偏了,自己挖个坑,封榜之后,才从坑里出来,过的队那么多,开始的时候过的那么快,应该就不是用这种扯淡方法做 ...
- C++ unordered_map remove 实现哈希表移除
使用C++的unordered_map类型时,我们经常要根据关键字查找,并移除一组映射,在Java中直接用remove即可,而STL中居然没有实现remove这个函数,还要自己写循环来查找要删除项,然 ...
- 如何把in_array 的第三个参数strict设置为 true
var_dump(in_array(0, array('s' )); 这句话的结果是bool(true). 因为in_array会将0 和's' 进行比较,0是number类型,'s'是string类 ...
- 【转】SVN环境搭建教程
http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html http://www.cnblogs.com/xiaobaihom ...