递归算法及经典递归例子代码实现

2019-12-30 11:55:41于丽

递归(recursion):程序调用自身的编程技巧。

  递归满足2个条件:

    1)有反复执行的过程(调用自身)

    2)有跳出反复执行过程的条件(递归出口)

 

递归例子:

(1)阶乘

         n! = n * (n-1) * (n-2) * ...* 1(n>0)


//阶乘
int recursive(int i)
{
	int sum = 0;
	if (0 == i)
		return (1);
	else
		sum = i * recursive(i-1);
	return sum;
}

(2)河内塔问题

递归算法,经典递归


//河内塔
void hanoi(int n,int p1,int p2,int p3)
{
	if(1==n)
		cout<<"盘子从"<<p1<<"移到"<<p3<<endl;
	else
	{
		hanoi(n-1,p1,p3,p2);
		cout<<"盘子从"<<p1<<"移到"<<p3<<endl;
		hanoi(n-1,p2,p1,p3);
	}
}

(3)全排列

  从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。