【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, ...
随机推荐
- Android Studio 修改字体
修改字体(font)大小(size) 本文引用: http://blog.csdn.net/caroline_wendy/article/details/21876727 Android St ...
- KMS服务器激活Windows和Office2013EnterprisePlus
KMS服务器激活Windows和Office2013EnterprisePlus 参考了文档 http://wenku.baidu.com/view/0cb2602358fb770bf68a5501. ...
- 关于android截图的一些方法
这里只记录一些链接,对于我的需求,只需要, public static String createScreenShot(View v) { //测试截屏功能 SimpleD ...
- 在linux中配置安装telnet服务
Telnet 是一种流行的用于通过 Internet 登录到远程计算机的协议.Telnet 服务器软件包为远程登录主机提供了支持.要通过 Telnet 协议与另一台主机通讯,您可以使用名称或 Inte ...
- asp.net中按钮回车事件(转自http://www.cnblogs.com/adinet/archive/2013/03/03/2941424.html)
在做ASP.net WEB应用的时候,常常遇到会在同一个页面里添加多个按钮,而每个按钮肯定都会触发页面回送事件. 在ASP.NET中,只能指定一个带有runat="server"的 ...
- win2008下安装SQL SERVER 2005出现IIS功能要求 警告解决方案
原因: 出现此问题的原因取决于 SQL Server 的不是所有 IIS 7.0 组件都安装在计算机上.下表列出了受影响的组件. 收起该表格展开该表格 组件 文件夹 静态内容 常见的 HTTP 功 ...
- border在IE6设置transparent无效
在ie6下给border设置transparent是无效的,解决办法如下: _border-color:tomato; /*For IE6-*/ _filter:chroma(color=tomato ...
- SQL Server提高事务复制效率优化(四)修改数据同步过程优化
1.原理 我说的数据修改同步过程指的是在快照生成完毕,分发代理将快照应用于订阅服务器完成订阅服务器初始化后,发布服务器后续的更改同步到订阅服务器过程,这也就是我们常常关注的延迟.此过程主要 ...
- Error:Execution failed for task ':app:dexDebug'.
com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ...
- C语言运算符优先级和口诀(转)
一共有十五个优先级: 1 () [] . -> 2 ! ~ -(负号) ++ -- &(取变量地址)* (type)(强制类型) sizeof 3 ...