递归算法【原理及经典应用举例】

本文详细介绍了递归算法的原理,包括递归的应用、设计步骤和缺点,并通过斐波纳契数列、阶乘、汉诺塔问题、上台阶问题、数组最大值、累加值、杨辉三角、回文串判断以及字符串全排列等经典例子进行了深入讲解,展示了递归在解决问题中的力量。
摘要由CSDN通过智能技术生成

递归算法【原理及经典应用举例】

递归算法

递归,就是在运行的过程中调用自己。

构成递归需具备的条件:

  1. 子问题须与原始问题为同样的事,且更为简单;
  2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。

递归应用

递归算法一般用于解决三类问题:

(1)数据的定义是按递归定义的。(例如:Fibonacci函数)

(2)问题解法按递归算法实现。
这类问题虽则本身没有明显的递归结构,但用递归求解比迭代求解更简单,如Hanoi问题。

(3)数据的结构形式是按递归定义的。
如二叉树、广义表等,由于结构本身固有的递归特性,则它们的操作可递归地描述。

设计递归算法的步骤:

1.确定递归公式

2.确定边界(终了)条件

递归的缺点

递归算法解题相对常用的算法如普通循环等,运行效率较低。因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。

简单递归问题举例

  1. 斐波纳契数列(Fibonacci Sequence),又称黄金分割数列。
    1、1、2、3、5、8、13、21…

Fib(0) = 1,Fib(1) = 1。
对所有n > 1的整数:
Fib(n) = (Fib(n-1) + Fib(n-2))

【斐波那契】

n = int(input())
def Fib(n):
	if n == 0 or n == 1:
		return 1
	else:
		return Fib(n-1)+Fib(n-2)
# 输出
for i in range (n):
	print (Fib(i),end=' ')
  1. 阶乘

1!= 1
对所有n > 1的整数:
n! = (n * (n-1)!)

【阶乘】

n = int(input())
def Fact(n):
	if n == 1:
		return 1
	else:
		return n*Fact(n-1)
# 输出
print (Fact(n))
  1. 汉诺塔问题

已知有三根针分别用A, B, C表示,在A中从上到下依次放n个从小到大的盘子。

现要求把所有的盘子从A针全部移到C针,移动规则是:可以使用B临时存放盘子,每次只能移动一块盘子,而且每根针上不能出现大盘压小盘,找出移动次数最小的方案。

A,B,C三个盘子,分别为初始位,过渡位,目标位:

(1)将最上面的n-1个圆盘从初始位移动到过渡位

(2)将初始位的最底下的一个圆盘移动到目标位

(3)将过渡位的n-1个圆盘移动到目标位

【汉诺塔问题】

count = 0
def hanoi(n,start,end,mid):
    global count
    if n == 1:
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值