程序调用自身的编程技巧称为递归。
一个过程或函数在其定义或说明中又直接或间接地调用自身的一种方法,通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
汉诺塔问题
参考代码
#include <fstream>
#include <iostream>
using namespace std;
void Move(int n,char x,char y)
{
cout << "move" << n << "from" << x << "to" << y << endl;
}
void Hannoi(int n,char a,char b,char c)
{
if(n == 1)
Move(1,a,c);
else
{
Hannoi(n-1,a,c,b);
Move(n,a,c);
Hannoi(n-1,b,a,c);
}
}
int main()
{
int n;
scanf("%d",&n);
Hannoi(n,'a','b','c');
return 0;
}