bobbai 发表于 2017-5-8 10:51:19

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

  这一章节我们来讨论一下递归函数,一个经常避免使用的,但又不得不学会的函数
  递归函数:函数Func(Type a,……)直接或间接调用函数本身,则该函数称为递归函数
  我下面以递归求和为例子:

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

>>> test()





[]
15
  

如果我单纯给出上面的例子,大家是不是觉得非常的难以理解呢?
  我把上面的代码换一下:

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

>>> test()





[]
0
5
9
12
14
15
>>>
  

这样可能理解起来会容易点,我下面将会一步步的将上面的函数的执行过程分解给大家
  1.当赋值到参数x里面,它会先执行print语句
  2.然后判断x是否还有对象,因为x存在对象,所以执行else的语句
  3.现在执行a=test这个语句,现在的x=,然后传递新的test的参数x的对象是
  循环步骤1到3,直到x=[]
  4.由于test([])返回0,返回0,注意:这个时候test(x)里面的x是[],反推回去,也即是x=[],x=
  5.由于test([])执行完返回0,x=,所以这个时候test()返回5
  6.同理,test()返回9,test()返回12,直到a=test(),a=14,打印a,然后x=1,x+14=15,因此最后会返回15
  其实,上面的代码类似于:

>>> def test(aList):
res=0
for item in aList:
res+=item
return res
>>> test()
15
>>>
  很多时候递归跟循环接近,但是递归有一个好处就是遍历结构所有的数据项

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

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

>>> test()
6
>>>
  

分解步骤:
  test()
  if not x:
  return 0
  else:
  a=test()
  if not x:
  return 0
  else:
  a=test()
  if not x:
  return 0
  else:
  a=test([])
  if not x:
  return 0#对应test([])
  return 3+0#对应test()
  return 3+2#对应test()
  return 5+1#对应test()
  >>>6
  上面的步骤应该比较明细的了
  总结:我们这一章节简单介绍了递归函数以及分解了递归函数的步骤
  这一章节就说到这里,谢谢大家

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

版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: 零基础学python-18.2 递归函数与分解递归函数的执行步骤