当前位置:   article > 正文

路飞学诚-python集训营-第二章-递归_python从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事,讲什么故事呢: 从

python从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事,讲什么故事呢: 从
  • 递归的介绍

首先,我们来讲一个故事:从前有座山,山里有座庙,庙里有个老和尚再给小和尚讲故事。

讲:"从前有座山,山里有座庙,庙里有个老和尚再给小和尚讲故事。"


讲:"从前有座山,山里有座庙,庙里有个老和尚再给小和尚讲故事。"。。。。。。

这可能是我们最早接触到的“递归函数”

  1. def calc(n):
  2. print(n)
  3. if int(n/2) ==0:
  4. return n
  5. return calc(int(n/2))
  6. calc(10)
  7. 输出:
  8. 10
  9. 5
  10. 2
  11. 1

函数calc先传进一个参数10经过函数体,在return是,把n/2返回calc中继续执行,知道n/2等于0截至。

这就是递归函数。递归函数主要用于解决数学难题。


  • 递归与栈的关系

在程序中,函数是存储在栈中,栈就好比弹壳,函数运行的数据就是弹药。在递归函数中,没递归一次,就好比在弹夹中压入一颗子弹。弹夹容量是有限制的,也就是说如果无限递归,早晚会撑爆弹夹。这也就是递归与栈的关系。


  • 递归的特性

上代码:

  1. def calc(n):
  2. v=int(n/2)
  3. print(v)
  4. if v==0:
  5. return
  6. calc(v)
  7. print(v)
  8. calc(10)

为什么会有这个结果?


每递归一次,就会有一个新的函数在执行,然而在下一层函数没有执行完毕之前,上一层函数就无法关闭,但是在下一层函数中还会继续调用函数。也就是说,在递归中,最后一层函数没有执行完毕前,他所有上层函数都是处在执行的状态,当最后一层执行完毕后,会由里到外,一层层执行关闭,这也是为什么会出现上面运行结果的原因。


结合上述,我们来总结下递归的特性。


1.必须有一个判断条件来结束递归。

2.每递归一次,问题的规模都会比上一层递归有所减少,都会更接近我们的判断条件。

3.递归效率不高,多次递归可能导致栈溢出。


  • 尾递归优化

我们都知道return是函数结束的标志,所以以return返回函数的方法调用自己,可以在执行下一层函数的时候关闭当前函数。

不过这种return不能附带当前层参数的运算,比如return n*func(n-1)

因为在你调用下一层函数的时候,还要与当前层参数运算,下一层不结束,就不能返回值与当前层参数运算,所以当前层函数就要等待下一层返回值。也就不能关闭当前层函数。多了这么多,这种优化方式在python中不支持,所以。呵呵




声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/848562
推荐阅读
相关标签
  

闽ICP备14008679号