递归

引入 递归的表现形式

下面是四个函数,互相调用返回结果

# 引入 递归的表现形式

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 递归 -*** 待补充的更多相关文章

  1. Python全栈开发【模块】

    Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...

  2. Python全栈开发【基础二】

    Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...

  3. Python全栈day21-22-23(模块)

    一,python的模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python ...

  4. 【Python全栈笔记】07 [模块二] 20 Oct 冒泡排序

    给出一个列表,进行冒泡排序 原理算法: li = [52, 37, 23, 11, 3, 1, ] print(li) # 每次循环,进行一次排序,列表内数字两两比较,最大的数字排到最末尾 # 一共循 ...

  5. 【Python全栈笔记】03 [模块二] 16-17 Oct 函数

    定义一个函数 def function_name(形式参数): 代码块 return 'Value' #如果没有写return,则默认返回None # 一个函数到return这一行就结束执行了,在re ...

  6. 【Python全栈笔记】01 [模块二] 14-15 Oct 运算符和字符串 4-1

    编码的问题 中文版 Windows 终端是默认GBK编码格式,python2默认为ASCII编码,虽然我们注释了需要用UTF-8,但是通过命令行运行的文件如果print中文内容还是会出现乱码. Uni ...

  7. 【Python全栈笔记】04 [模块二] 18 Oct lambda表达式, 内置函数

    lambda表达式 lambda表达式是函数的一种简化,如下面两种函数定义方法,实际上效果是一样的. 使用lambda表达式的函数,func2是函数名,lambda: 后面的123 即为返回值. de ...

  8. 【Python全栈笔记】05 [模块二] 19 Oct 文件的操作

    文件操作 一般步骤1. 文件打开 2. 文件操作 3. 文件关闭 1. 打开文件 使用open(文件名(绝对路径), 打开模式, 编码) 文件打开的模式有: r:  只读模式(默认) w: 只写模式 ...

  9. 【Python全栈笔记】03 [模块二] 16-17 Oct Set 集合,三目运算

    Set 集合 set - unordered collections of unique elements 创建一个set/一个空set # create a new set set1 = {1,2, ...

随机推荐

  1. Xcode 7 调试野指针利器 Address sanitizer

    Xcode 7 调试野指针利器 Address sanitizer 什么是Address Sanitizer? AddressSanitizer is a fast memory error dete ...

  2. 文本XSS攻击过滤

    在FCK或百度编辑器等常用富文本编辑器中,通常是会被XSS攻击 处理方法: 文本框模拟输入了以下文本 <span style="dispaly:none" onclick=& ...

  3. 【java】分页查询实体类

    package com.dmsd.itoo.tool.pageModel; import java.io.Serializable; import java.util.HashMap; import ...

  4. window7下使用vagrant打造lamp开发环境(二)

    上一节我们基本把软件跟系统环境,以及连接虚拟机给配置好了,下面我们将要进行开发环境的搭建(lamp) 这里安装其实很简单,因为我们用的centos,所以很大一部分安装都是通过yum安装 关于yum的详 ...

  5. vi和vim 的常用操作

    到文件末尾: ESC + shift G : 到文件头: G + G: 整块模式 快捷键  [不使用鼠标,来选择块] v                   字符选择,会将光标经过的地方反白选择! V ...

  6. tomcat源码剖析

    最近看Tomcat的源码的节奏还算是挺紧凑的,给人的感觉,tomcat的代码相对以前读的jetty的代码显得更有条理一些...当然这也是有可能是因为自己看的jetty的版本是比较老的,而看的Tomca ...

  7. Java基础(一) ---- 封装(Encapsulation)

  8. MYSQL性能优化分享(分库分表)

    1.分库分表 很明显,一个主表(也就是很重要的表,例如用户表)无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表mem ...

  9. IIS 出现如下错误:PageHandlerFactory-Integrated”

    原因: vs2010默认的是4.0框架,4.0的框架是独立的CLR,和2.0的不同,如果想运行4.0的网站,需要用aspnet_regiis注册4.0框架,然后用4.0的Class池,就可以运行4.0 ...

  10. ubuntu下 too many file open 异常

    后台高并发或者多线程的情况下,无论是操作数据库还是操作文件,应用报出 too many file open 异常,其原因是受宿主系统文件数的限制.问题解决方式如下: 第一步:检查所在系统的文件数限制 ...