`
李灵晖-raylee
  • 浏览: 128579 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

零基础学python-18.2 递归函数与分解递归函数的执行步骤

 
阅读更多

这一章节我们来讨论一下递归函数,一个经常避免使用的,但又不得不学会的函数

递归函数:函数Func(Type a,……)直接或间接调用函数本身,则该函数称为递归函数

我下面以递归求和为例子:

>>> def test(x):
	print(x)
	if not x:
		return 0
	else :
		return x[0]+test(x[1:])

	
>>> test([1,2,3,4,5])
[1, 2, 3, 4, 5]
[2, 3, 4, 5]
[3, 4, 5]
[4, 5]
[5]
[]
15


如果我单纯给出上面的例子,大家是不是觉得非常的难以理解呢?

我把上面的代码换一下:

>>> def test(x):
	print(x)
	if not x:
		return 0
	else :
		a=test(x[1:])
		print(a)
		return x[0]+a

	
>>> test([1,2,3,4,5])
[1, 2, 3, 4, 5]
[2, 3, 4, 5]
[3, 4, 5]
[4, 5]
[5]
[]
0
5
9
12
14
15
>>> 


这样可能理解起来会容易点,我下面将会一步步的将上面的函数的执行过程分解给大家

1.当[1,2,3,4,5]赋值到参数x里面,它会先执行print语句

2.然后判断x是否还有对象,因为x存在对象,所以执行else的语句

3.现在执行a=test[1:]这个语句,现在的x=[1,2,3,4,5],然后传递新的test的参数x的对象是[2,3,4,5]

循环步骤1到3,直到x=[]

4.由于test([])返回0,返回0,注意:这个时候test(x)里面的x是[],反推回去,也即是x[1:]=[],x=[5]

5.由于test([])执行完返回0,x=[5],所以这个时候test([5])返回5

6.同理,test([4,5])返回9,test([3,4,5])返回12,直到a=test([2,3,4,5]),a=14,打印a,然后x[0]=1,x[0]+14=15,因此最后会返回15

其实,上面的代码类似于:

>>> def test(aList):
	res=0
	for item in aList:
		res+=item
	return res

>>> test([1,2,3,4,5])
15
>>> 

很多时候递归跟循环接近,但是递归有一个好处就是遍历结构所有的数据项

由于感觉上面说到不够明了,所以我们下面再举一个简单一点的例子:test([1,2,3])

>>> def test(x):	
	if not x:
		return 0
	else :
		a=test(x[1:])		
		return x[0]+a

	
>>> test([1,2,3])
6
>>> 


分解步骤:

test([1,2,3])

if not x:

return 0

else:

a=test([2,3])

if not x:

return 0

else:

a=test([3])

if not x:

return 0

else:

a=test([])

if not x:

return 0#对应test([])

return 3+0#对应test([3])

return 3+2#对应test([2,3])

return 5+1#对应test([1,2,3])

>>>6

上面的步骤应该比较明细的了

总结:我们这一章节简单介绍了递归函数以及分解了递归函数的步骤

这一章节就说到这里,谢谢大家

------------------------------------------------------------------

点击跳转零基础学python-目录

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    Python 核心编程 第二版

    阐释这门语言的“核心”内容,包括基本的概念和语句、语法和风格、 Python对象、数字类型、序列类型、映射和集合类型、条件和循环、文件和输入/输出、错误和异常、函数和函数式编程、模块、面向对象编程、执行环境等...

    廖雪峰Pyhton教程3.x版[完整版]

    4.4 递归函数 70 5 高级特性 73 5.1 切片 73 5.2 迭代 77 5.3 列表生成式 79 5.4 生成器 81 5.5 迭代器 88 6 函数式编程 90 6.1 高阶函数 91 6.1.1 map/reduce 94 6.1.2 filter 97 6.1.3 sorted 100 6.2 返回函数 ...

    Python核心编程第二版

     第3章 Python基础   3.1 语句和语法   3.1.1 注释(#)   3.1.2 继续(\)   3.1.3 多个语句构成代码组(:)   3.1.4 代码组由不同的缩进分隔   3.1.5 同一行书写多个语句(;)   3.1.6 ...

    像计算机科学家一样思考Python(第2版).pdf

    5.9 递归函数的栈图 46 5.10 无限递归 47 5.11 键盘输入 47 5.12 调试 48 5.13 术语表 49 5.14 练习 50 第6章 有返回值的函数 53 6.1 返回值 53 6.2 增量开发 54 6.3 组合 56 6.4 布尔函数 57...

    Python核心编程第二版(ok)

     第3章 Python基础   3.1 语句和语法   3.1.1 注释(#)   3.1.2 继续()   3.1.3 多个语句构成代码组()   3.1.4 代码组由不同的缩进分隔   3.1.5 同一行书写多个语句(;)   3.1.6 模块...

    Python基础教程(第3版)-201802出版-文字版

    久负盛名的 Python 入门经典针对 Python 3 全新升级十个出色的项目,让你尽快可以使用 Python 解决实际问题目录第 1章 快速上手:基础知识 ........................ 1 1.1 交互式解释器 .............................

    C++数据抽象和问题求解(第6版).[美]Frank M. Carrano(带详细书签).pdf

    这本经典、畅销的数据结构教材详细介绍了数据抽象的基础知识,强调作为面向对象方法基础原理的规范和实施之间的区别。书中使用的软件工程原则和概念以及UML图便于增强学生的理解。 ◆ 详细介绍了数据抽象,强调规范...

    算法心得:高效算法的奥秘(原书第2版).[美]Henry S.Warren,Jr(带详细书签).pdf

    1.2 指令集与执行时间模型 5 1.3 习题 10 第2章 基础知识 11 2.1 操作最右边的位元 11 2.1.1 德摩根定律的推论 12 2.1.2 从右至左的可计算性测试 13 2.1.3 位操作的新式用法 14 2.2 结合逻辑操作的加减运算 ...

    代码之美(中文完整版).pdf

    第18章 Python的字典类:如何打造全能战士 18.1. 字典类的内部实现 18.2. 特殊调校 18.3. 冲突处理 18.4. 调整大小 18.5. 迭代和动态变化 18.6. 结论 18.7. 致谢 第19章 NumPy中的多维迭代器 19.1 N维数组操作中的...

    疯狂JAVA讲义

    1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6 1.3.2 Java程序的运行机制和JVM 6 1.4 开发Java的准备 7 1.4.1 安装JDK 8 学生提问:不是说JVM是运行Java程序的虚拟机吗?那...

Global site tag (gtag.js) - Google Analytics