首页 > 其他 > 详细

什么是递归

时间:2020-03-22 10:49:22      阅读:69      评论:0      收藏:0      [点我收藏+]

一、函数递归 recursion
什么是递归:
函数直接或者间接的调用自身

示例:直接调用自身------死递归

def f():
    f()
f()
print("递归完成")
执行结果:
RecursionError: maximum recursion depth exceeded

示例:间接调用自身------死递归

def fa():
    fb()

def fb():
    fa()
fa()
执行结果:
RecursionError: maximum recursion depth exceeded

递归说明:
1。 递归一定要控制递归层数,当符合某一条件时要终止递归

2。几乎所有的递归都能用循环来代替(重复的做一些事,规则相同,可用递归)

3。所有的循环都可以用递归做

4。循环对于整个运算的过程要非常清楚,而递归只要知道第N步和第N-1步直接的关系,实际上是一种数学归纳法的体现

  a) 循环需要知道a和n的关系,然后循环求解 (这个需要数学归纳法来求解出等式)

  b) 递归只需要知道a 和 an-1 的关系就可以

补充:

数学归纳法的基本步骤分两步:

  1. 证明当n= 1时命题成立。
  2. 假设n=m时命题成立,那么可以推导出在n=m+1时命题也成立。(m代表任意自然数)

对于递归的计算的实现的理解

举例:

def fn(n):
    print("现在是第",n,"层递归")
    if n >= 3:
        return
    fn(n+1)
    print("递归的第",n,"层结束")
fn(1)


执行结果:
现在是第 1 层递归
现在是第 2 层递归
现在是第 3 层递归
递归的第 2 层结束
递归的第 1 层结束

用图的方式理解计算机如何实现递归的

 

技术分享图片

以上的递归实现的过程

 

递归也要区分真递归和假递归 

用n!的求解举例 :

第一种方法:

a=n!=n*(n-1)*(n-2)*......*5*4*3*2*1

由于可以直接找到a和 n的关系

s=1
n=eval(input())
for i in range(n):
    s=s*i
print(s)
>>>3
>>>6

由于前面提到循环都可以用递归解决,可以变成递归如下:

def fac(n,s=1):
    if n==1:
        return s
    return fac(n-1,s*n)
print(fac(3))
>>>6

然而这是一个假递归, 只是把循环变成了递归而已

第二种

def fac(n):
    if n==1:
        return 1
    return n*fac(n-1)
print(fac(3))
>>>6

这个才是真递归,是通过

a= an-1 * n 的递归方式求出解

以上是我对 递归的理解

什么是递归

原文:https://www.cnblogs.com/vincent-sh/p/12543996.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!