【Python全栈笔记】08 [模块二] 20 Oct 递归 -*** 待补充
递归
引入 递归的表现形式
下面是四个函数,互相调用返回结果
# 引入 递归的表现形式 def f1():
return '' def f2():
r = f1()
return r def f3():
r = f2()
return r def f4():
r = f3()
return r result = f4()
print(result)
# 最后输出结果 1
除了依次调用其他函数,函数也可以调用自己
下面的f1()函数一直在调用自己,相当于一个死循环,python内部有机制,当递归调用到一定数量的时候就会报错停止调用了。
def f1():
f1() f1() # 报错: RecursionError: maximum recursion depth exceeded
经典的递归用法有斐波那契数列:
# 递归的典型应用,斐波那契数列
def fib(x, y): if x + y > 1000:
return
z = x + y
fib_list.append(z)
fib(y, z)
return fib_list fib_list = [0, 1]
result = fib(0, 1)
print(result)
# 得到结果:[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
斐波那契数列加上循环的次数限制:
# 执行了10次后斐波那契数列的结果 def fib_counts(counts, x, y):
if counts == 11:
return fib_list
z = x + y
fib_list.append(z)
r = fib_counts(counts + 1, y, z)
return r fib_list = [0, 1]
result = fib_counts(1, 0, 1)
print(result)
# [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
注意:继续调用函数要有一个返回值来return
课堂失败案例:
def num(a, b, n):
if n == 10:
return a
c = a + b
num(b, c, n+1)
return a
s = num(0, 1, 1)
print(s)
# 上面的num(b, c, n+1) 没有返回,直接返回了传入的最原始参数a 结果为0
# 因为下一次执行的函数拿到数值后要往上一层传递,但是上一层没有接收的地方,等于无用功 # 修改成如下即可:
def num(a, b, n):
if n == 10:
return a
c = a + b
r = num(b, c, n+1)
return r s = num(0, 1, 1)
print(s)
# 结果返回34
补充:
汉诺塔递归
【Python全栈笔记】08 [模块二] 20 Oct 递归 -*** 待补充的更多相关文章
- Python全栈开发【模块】
Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...
- Python全栈开发【基础二】
Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...
- Python全栈day21-22-23(模块)
一,python的模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python ...
- 【Python全栈笔记】07 [模块二] 20 Oct 冒泡排序
给出一个列表,进行冒泡排序 原理算法: li = [52, 37, 23, 11, 3, 1, ] print(li) # 每次循环,进行一次排序,列表内数字两两比较,最大的数字排到最末尾 # 一共循 ...
- 【Python全栈笔记】03 [模块二] 16-17 Oct 函数
定义一个函数 def function_name(形式参数): 代码块 return 'Value' #如果没有写return,则默认返回None # 一个函数到return这一行就结束执行了,在re ...
- 【Python全栈笔记】01 [模块二] 14-15 Oct 运算符和字符串 4-1
编码的问题 中文版 Windows 终端是默认GBK编码格式,python2默认为ASCII编码,虽然我们注释了需要用UTF-8,但是通过命令行运行的文件如果print中文内容还是会出现乱码. Uni ...
- 【Python全栈笔记】04 [模块二] 18 Oct lambda表达式, 内置函数
lambda表达式 lambda表达式是函数的一种简化,如下面两种函数定义方法,实际上效果是一样的. 使用lambda表达式的函数,func2是函数名,lambda: 后面的123 即为返回值. de ...
- 【Python全栈笔记】05 [模块二] 19 Oct 文件的操作
文件操作 一般步骤1. 文件打开 2. 文件操作 3. 文件关闭 1. 打开文件 使用open(文件名(绝对路径), 打开模式, 编码) 文件打开的模式有: r: 只读模式(默认) w: 只写模式 ...
- 【Python全栈笔记】03 [模块二] 16-17 Oct Set 集合,三目运算
Set 集合 set - unordered collections of unique elements 创建一个set/一个空set # create a new set set1 = {1,2, ...
随机推荐
- 支持ASP.NET MVC
ASP.NET MVC能很方便在后台返回JSON数据,所以与MiniUI进行数据交互非常简单. 1)后台处理: 在MVC控制器中,可以通过方法参数接收数据,也可以通过Request接收更复杂的数据对象 ...
- html狂记
由于承接一部分站点优化工作,竟无节操地好几天没有喂博客,好了,今天完成交接工作,马上奉上DIV+CSS传统开发的干货一枚,内容绝非原创,仅是收集.学习.消化.总结.吐出... 基本结构标签: < ...
- 微信连wifi
微信连wifi 首先需要到微公众平台添加微信连wifi功能插件
- GMM的EM算法实现
转自:http://blog.csdn.net/abcjennifer/article/details/8198352 在聚类算法K-Means, K-Medoids, GMM, Spectral c ...
- Scorpio-CSharp简介
Scorpio-CSharp是为了解决Unity游戏各个平台热更新的问题,纯c#实现 基于.net2.0 兼容所有c#平台 语法类似 javascript, 设计初衷是为了做一个所有人都能修改的热更新 ...
- 【原创】android内存管理-hprof文件
转载请注明出处 http://www.cnblogs.com/weiwangnuanyang/p/5703702.html 如果只是想确定一下某一个场景是否有内存泄漏,AndroidStadio的控制 ...
- 图片链接hover移动的解决方案分析
现实在网站中,我们经常看到有鼠标滑过某个图片,出现边框的效果.如下图:
- your PC ran into a problem and needs to restart system_thrread_exception_not_handled
- js错误:TypeError $(...) is null
转载自:http://www.phpernote.com/jquery/851.html:
- etcd命令说明 etcd Version: 3.0.15
etcd Version: 3.0.15Git SHA: fc00305Go Version: go1.6.3Go OS/Arch: linux/amd64 https://github.com/co ...