码迷,mamicode.com
首页 > 编程语言 > 详细

Python3 递归算法

时间:2018-05-18 14:02:57      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:int   重复   栈溢出   简洁   设计程序   大小   ret   调用   二分法   

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

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

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

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

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

 

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

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

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

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

 

递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(比如Fibonacci函数)
(2)问题解法按递归算法实现。(回溯)
(3)数据的结构形式是按递归定义的。(比如数的遍历,图的搜索,二分法查找等)

 

1-100求和

(1)非递归

sum = 0

for i in range(1,101):

  sum += i

print(sum)

 

(2)递归方法

def sum1(n):

  if n <=0:

    return 0

  else:

    n = n + sum1(n -1)

  return n

print(sum1(100))

 

2.阶乘

def sum2(m):

  if n < 1:

    return 1

  else:

    n = n * sum2(n -1)

  return n

print(sum2(5))

Python3 递归算法

标签:int   重复   栈溢出   简洁   设计程序   大小   ret   调用   二分法   

原文地址:https://www.cnblogs.com/dx-Dark/p/9055143.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!