递归函数与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.…….在数学上,斐波纳契数列以如下 ...
随机推荐
- MVC 路由模块分析(一)
概述 主要分为四个部分进行分析. First ——Usage: then ——Extension: and then ——Design: last ——Test. 1. Usage 1.1 Displ ...
- GridView点击排序
快速预览:GridView无代码分页排序GridView选中,编辑,取消,删除GridView正反双向排序GridView和下拉菜单DropDownList结合GridView和CheckBox结合鼠 ...
- 【python游戏编程之旅】第二篇--pygame中的IO、数据
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇中,我们介绍了pygame的入门操作http://www.cnblogs.com/msxh/p/49 ...
- python 代码片段6
#coding=utf-8 # python常用的列表list和字符串string # tuple元组,一个身有残疾的只读列表 s='python' print s[0] print s[-1] # ...
- BZOJ1107 : [POI2007]驾驶考试egz
i可以作为起点说明把边反向后可以从1和n到达i. 设fl[i]表示从1到达i至少需要加几条边,fr[i]表示从n到达i至少需要加几条边. 把图上下翻转后,从左往右依次计算fl[i],有fl[i]=i- ...
- 追本溯源 解析“大数据生态环境”发展现状(CSDN)
程学旗先生是中科院计算所副总工.研究员.博士生导师.网络科学与技术重点实验室主任.本次程学旗带来了中国大数据生态系统的基础问题方面的内容分享.大数据的发展越来越快,但是对于大数据的认知大都还停留在最初 ...
- Windows Phone7 快递查询
(1)API去友商100里申请 布局代码: Exp.xaml <phone:PhoneApplicationPage x:Class="WindowsPhone_Express ...
- 【TYVJ】1463 - 智商问题(二分/分块)
http://tyvj.cn/Problem_Show.aspx?id=1463 二分的话是水题啊.. 为了学分块还是来写这题吧.. 二分: #include <cstdio> #incl ...
- YUV YCbCr
一,介绍 YUV是一种颜色空间 其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值: 而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和 ...
- iOS应用程序本地化
一.简介 * 使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言 * 如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.lpr ...