递归算法小结

递归算法的设计重在两点:

1. 确定递归出口,即递归终止条件

2. 设计递归公式


典型的递归问题有:

1. 斐波那契数列 

公        式:F(n) = F(n-1) + F(n-2) (n>=2)

递归出口:n=2时,F(1) =1,  F(0) = 1

兔子产子问题,计算第n个月,出生的兔子对数,本质上就是一个斐波那契数列。


2. 求数的阶乘

公        式:F(n) = n*F(n-1) (n>=2)

递归出口:F(1) = 1


3. 求数列的最小公倍数和最大公约数

比如:a[4] = {2, 6, 8, 10}。

求解思路是:{2}与{6,8,10}之间的最小公倍数是a[4]数列的最小公倍数;进而求{6, 8, 10}的最小公倍数,可分解为求{6}与{8,10}间的最小公倍数。

直至分解到求2个数的最小公倍数。当两个数进行比较的时候,就是递归的出口。


4. 汉诺塔问题

汉诺塔的解题思路是当只有最底下一个盘子时,直接从A移动到C。否则,借用B将其上(n-1)的盘子先移动到B上,然后将最后一个盘子移动C上,再把(n-1)个盘子借由A移动到C上。

因此,很容易写出递归函数是:

void hanoi(int n,int a,int b,int c)
{
	if(1==n)
		cout<<"盘子从"<

5. 快速排序(待补充)




你可能感兴趣的:(程序设计算法)