递归函数与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.…….在数学上,斐波纳契数列以如下 ...
随机推荐
- BZOJ3165 : [Heoi2013]Segment
建立线段树,每个节点维护该区间内的最优线段. 插入线段时,在线段树上分裂成$O(\log n)$棵子树,若与当前点的最优线段不相交,那么取较优的,否则暴力递归子树. 查询时在叶子到根路径上所有点的最优 ...
- vim molokai配色方案(调过)
" Vim color file " " Author: Tomas Restrepo <tomas@winterdom.com> " " ...
- POST模拟百度登录和自动发帖
这里用HttpClient发包模拟百度登录和发帖,验证码部分采用机器下载人工识别. 登陆百度的原理:1. 访问https://passport.baidu.com/v2/api/?getapi& ...
- 使用STL库sort函数对vector进行排序
使用STL库sort函数对vector进行排序,vector的内容为对象的指针,而不是对象. 代码如下 #include <stdio.h> #include <vector> ...
- JSON字符串与java对象的转换
所需的jar包: 1.commons-lang.jar 2.commons-beanutils.jar 3.commons-collections.jar 4.commons-logging.jar ...
- iOS开发中代理使用出现的问题解决
在给自定义的LHQTabBar设置代理的时候,定义的代理的属性的时候此时会报一个警告 我们需要遵守UITabBarDelegate的协议才行, 不过此时还有警告,警告已经变成了 此时我们需要在.m文件 ...
- Matlab Delete Row or Col 删除矩阵的行或列
Matlab中,我们有时候要删除矩阵中的某行某列,可以采用下列方法进行删除: a = [ ]; a(,:) = []; % Delete row a(:,) = []; % Delete col
- c++ <string.h>中包括哪些常用函数
常用函数如下:strlen 求字符串长度strcmp 比较2个字符串是否一样strcat 字符串连接操作strcpy 字符串拷贝操作strncat ...
- hdu1028 Ignatius and the Princess III
这是道典型的母函数的题目,可以看看我的母函数这一标签上的另一道例题,里面对母函数做了较为详细的总结.这题仅贴上代码: #include"iostream" using namesp ...
- tp框架中表单数据的接收
在thinkphp框架中,接收传过来的表单数据.如果一个一个处理,当数据多时,不显示.也可以用循环.最好的是使用create函数,接受所有的数据.代码行大大减少.很方便.