1、递归的特点

递归算法是一种直接或间接调用自身算法的过程,在计算机编程中,递归算法对解决一大类问题是十分,它往往使算法的描述简洁而且易于理解。

递归算法解决问题的特点:

(1)递归就是在过程或函数里调用自身

(2)在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

(3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低,所以一般不提倡用递归算法设计程序。

(4)在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储,递归次数过多容易造成栈溢出等。

2、递归的要求

递归算法所体现的“重复”一般有三个要求:

(1)每次调用在规模上都有所缩小(通常是减半)

(2)是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出作为后一次的输入)

(3)在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模位达到直接解答的大小为条件)无条件递归调用将会成为死循环而不能正常结束。

3、递归实例

#递归就是函数自己调用自己
# count = 0
# def abc():
#     global count
#     count+=1
#     print(\'abc\')
#     print(count)
#     return abc()#函数自己调用自己,递归一定要有结束条件,输入错误的时候,可以继续往下输入,会重新调用
# #循环效率比递归效率高
# abc()#报错,超过最大的递归次数,不同于死循环,最大限制次数,最多999

 

#递归实现n个斐波那契数列:
def fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)
print([fibonacci(x) for x in range(10)])

# 输出:
# [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
#返回n以内所有数的阶乘的和:
def fn(n):
    if n == 1:
        return 1
    else:
        return n * fn(n - 1)
print(sum(map(fn, range(1, 10))))

#输出:409113

 

#计算1到100之间相加之和;通过循环和递归两种方式实现

def sum_cycle(n):
    \'\'\'
to n,The sum function
    \'\'\'
    sum = 0
    for i in range(1,n + 1):
        sum += i
    return sum

def sum_recu(n):
    \'\'\'
to n,The sum function
    \'\'\'
    if n > 0:
        return n + sum_recu(n - 1) #调用函数自身
    else:
        return 0
print("循环求和:",sum_cycle(100))
print("递归求和:",sum_recu(100))

#输出结果:
# 循环求和: 5050
# 递归求和: 5050
def func1(n):
    "打印100以内的奇数"
    if n <= 100:
        print(n)
        n += 2
        return func1(n)
func1(1)
#求一个数的质因数
def zhiyinshu(n):
    for x in range(2, int(n/2+1)):
        if n % x == 0:
            l.append(x)
            return zhiyinshu(n/x)
    l.append(int(n))
    print(l)
l = []
zhiyinshu(100)

 

版权声明:本文为blueteer原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/blueteer/p/10097072.html