博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python的递归
阅读量:6072 次
发布时间:2019-06-20

本文共 1738 字,大约阅读时间需要 5 分钟。

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 sumdef sum_recu(n):    '''to n,The sum function    '''    if n > 0:        return n + sum_recu(n - 1) #调用函数自身    else:        return 0print("循环求和:",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)

 

转载于:https://www.cnblogs.com/blueteer/p/10097072.html

你可能感兴趣的文章
【2018ICPC沈阳】
查看>>
preg_match函数和preg_match_all函数
查看>>
防止人为误操作MySQL数据库技巧一例
查看>>
【原创】利用MySQL 的GROUP_CONCAT函数实现聚合乘法
查看>>
JavaScript服务器端开发技术(对象属性的枚举与查询)
查看>>
linux tmpfs与/dev/shm探讨及其应用
查看>>
打造高质效的技术团队 —— 酝酿篇
查看>>
Lync Server 2013标准版升级Skype for Business Server 2015实战(下)
查看>>
数据库方言
查看>>
你们可能都小看了Windows!
查看>>
wps文件批量转换到 microsoft office平台 软件
查看>>
WPF-008:使用PageFunction导航不能使用带参构造和线程导航
查看>>
90后美女的全能测试蜕变之路
查看>>
Oracle Fusion Middleware 12c GoldenGate Studio Installation
查看>>
用Squid实现反向代理
查看>>
微博一键分享主要通过对指定 URL 添加各种参数来实现
查看>>
跨运营商MPLS *** ---背靠背
查看>>
帝国时代 你爱它说明老了
查看>>
精通MVC3摘译(4)-使用Area
查看>>
音视频开发:码率、延时、花屏、卡顿
查看>>