文档章节

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

raylee2015
 raylee2015
发布于 2015/10/21 08:10
字数 696
阅读 2
收藏 0

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

递归函数:函数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-目录

 

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

本文转载自:http://blog.csdn.net/raylee2007/article/details/48530025

共有 人打赏支持
raylee2015
粉丝 6
博文 265
码字总数 44224
作品 0
江门
私信 提问
Python书单走一波,敢来我就敢送

入门Python看什么书好?下面就跟着一起来看看Python入门书籍推荐。 最近几年,Python编程语言可谓是大火起来。无论是在人工智能中的运用,在云计算中的不可获取,或者是载入中学的教学课程之中...

weixin_44099558
2018/12/30
0
0
用python玩转数据|基本语法

比较运算符 打开文件 模块:一个完整的python文件即是一个模块 包:一个有层次的文件目录结构 库:一组具有相关功能的模块的集合 题目1:接收键盘输入姓、名,然后分解输出 输出: 第一单元小...

darlingwood2013
2017/03/08
0
0
人人都能学会的python编程教程13:递归函数

话说美食街上有个煎包店,1块钱2个,2块钱3个,3块钱5个,5块钱8个。人们笑称之为斐波拉切煎包。 在数学上,斐波纳契数列被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n...

编程老司机
2018/05/10
0
0
Python知识点总结篇(四)

递归 特性 - 必须有明确的结束条件; - 每进入深一层递归,问题规模比上层应有所减少; 递归效率不高,层次更多会导致栈溢出; 函数式编程 计算机:在计算机层面,CPU执行的是加减乘除以及各...

村雨1943
2018/10/03
0
0
Python函数式编程中map()、reduce()和filter()函数的用法

Python中、和三个函数均是应用于序列的内置函数,分别对序列进行遍历、递归计算以及过滤操作。这三个内置函数在实际使用过程中常常和联合使用,我们首先介绍下lambda函数。1、lambda函数 la...

损失函数
2018/05/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql grant 用户权限总结

用户权限管理主要有以下作用: 1. 可以限制用户访问哪些库、哪些表 2. 可以限制用户对哪些表执行SELECT、CREATE、DELETE、DELETE、ALTER等操作 3. 可以限制用户登录的IP或域名 4. 可以限制用...

Airship
33分钟前
1
0
RabbitMQ学习(3)

1. 消费端 1. 消费端通过推模式或者拉模式从RabbitMQ中获取并消费消息,当消费者确认处理消息后,可以手动确认消息已被接收,然后就会将该消息从RabbitMQ的队列中标记再清除,消费者端还可以...

江左煤郎
44分钟前
1
0
linux mysql(5.7)开启慢查询

一、有3个配置需要设置, 1:相关开关 2:日志目录文件 3:慢查询的时间限制 二、设置完之后重启mysql service mariadb restart 三、重启后做个测试 连接mysql 并查询: select sleep(6); 四...

chro008
52分钟前
2
0
选择IDC机房、选择硬件、上架服务器、装系统

选择IDC机房 当业务量比较大的时候,往往选用IDC而不是公有云来跑业务。 IDC机房的服务一般分为两种 需要我们自己购买服务器和网络设备,托管到IDC机房。IDC机房会提供布线、巡检、硬件操作等...

李超小牛子
53分钟前
2
0
《傲慢与偏见》的读书笔记与读后感作文2400字

《傲慢与偏见》的读书笔记与读后感作文2400字: 作者:孙苑馨;笔者按:读书这个习惯是我爸妈养出来的。小时候父母赚的钱除了吃饭穿衣剩下的就是买书了,他们除了买各种新鲜出版的文艺派图书...

原创小博客
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部