一、知识梳理
所谓递归,就是一个函数在它的函数体内调用它自身的过程。可以简单的分为直接递归和间接递归。
直接递归简单的说就是函数自己调用自己。比如A()调用A()就是直接递归。间接递归是指函数在嵌套循环过程中出现了一种循环调用的现象,比如A()调用了B(),B()调用了A()。
在递归调用中,主调函数一般又是被调函数。在执行递归函数将反复调用自身,每调用一次就进入下一层。
比如:int f(int x)
{
int y;
z=f(y);
return z;
}
二、递归问题的解题思路
(1)弄清递归的本质:从未知到已知的倒推求解方式。
(2)牢记“分治法”思想。即严格按将一个规模n的问题变为规模较小的n-1或n-2等问题来解决,而大规模问题与较小规模问题具有同样的解决方案。
(3)按照分而治之的理论,设计一个好的函数模型是递归的关键。
(4)递归终止条件是必不可少的,缺少了递归终止条件意味着递归可能会无限执行而造成系统的崩溃。
下面是一个例题:
用递归算法解决Hanoi塔问题。
Hanoi塔问题:
一块板上有三根柱,A、B和C。A柱上套有n个大小不同的圆盘,大的在下,小的在上。图就不放了。要把这n个圆盘从A柱移动移动到C柱上,每次只能移动一个圆盘,移动可以借助B柱进行。但在任何时候,任何柱上的圆盘都必须保持大盘在下,小盘在上。求移动的步骤。
首先我们先来分析一下:
设A上有n个盘子,其算法如下:
如果