python递归函数分叉树枝_如何最简单、通俗地理解Python的递归?

这是从林海峰博客里面copy的。很好的解释了,python函数的递归。

那什么是递归?

在函数内部,可以调用其他函数。如果在调用一个函数的过程中直接或间接调用自身本身

递归的样子

def digui(n):

print(n)

digui(n)

digui(10)

这个函数是无休止进行下去的,如何停止?

所以我们需要利用函数的返回值——return

简单举例递归

初识递归

def fan(n):

# print(n)

if int(n / 2) == 0:

return n

res=fan(int(n / 2))

return res

v=fan(5)

print(v)

1.fan(5)——调用函数fan,n=5

2. print(n)——打印5,表示n=5

3.if int(n / 2) == 0:——判断5/2是否为0,不满足

4. res=fan(int(n / 2))——执行res,fan(2)*取整*

5.fan(2)——执行fan(2)

6.print(2)——打印2,表示n=2

7.if int(n / 2) == 0:——判断2/2是否为0,不满足

8.res=fan(int(n / 2))——执行res,fan(1)

9.fan(1)——执行fan(1)

10.print(1)——打印1,表示n=1

11.if int(n / 2) == 0:——判断1/2是否为0,*取整*,满足

12.return n——返回n,n现在等于1

13.思考:n等于1返回的历程

是直接返回到fan(5)?还是先返回到fan(2),fan(2)得到一个返回值,fan(2)再返回到fan(5)

用更简单的例子来说就是:

假如我是一个班级的学生,我想在我的班找一本书。

我问同学A:“同学你知道书在什么地方?”

A回答:“我不知道,我帮你问问B”

A问B:“同学你知道书在什么地方?”

B回答A:“我不知道,我帮你问问C”

B问C:”同学你知道书在什么地方?”

C回答B:“书在书架的最下面”

B现在知道书在什么地方,B就告诉A,然后A就告诉我。

完美理解递归

students_list=['A','B','C','D']

def fund_book(students_list):

if len(students_list)==0:

return '没有人知道书在什么地方'

student=students_list.pop(0)

if student=='C':

return'{0}说:我知道,书放在书架最下面'.format(student)

print('同学{0},你知道书在哪里?'.format(student))

print('{0}回答道:我不知道,但念你慧眼识猪,你等着,我帮你问问{1}'.format(student,students_list))

res=fund_book(students_list)

print('%s问的结果是: %res' % (student, res))

return res

v=fund_book(students_list)

print(v)

总结

递归特性:

1. 必须有一个明确的结束条件

2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值