递归的定义:
若一个对象部分的包括它自己,或用它自己给自己定义,则称这个对象是递归的,递归也可定义为,在一个过程中直接或间接的调用自己,则这个过程也是递归的。
汉若塔问题:
提到递归问题就不得不提一个很经典的问题—-汉若塔,汉若塔的背景我就不凑字数仔细描述了(qaq),其实就是将一摞盘子按半径从小到大的顺序,借助一座辅助塔B,从A塔搬到C塔。具体情况如下图:
C语言程序
#include <stdio.h>
typedef int _ElemType;
typedef char _ElemChar;
void move(_ElemChar x, _ElemType n, _ElemChar z)
{
printf("正在将编号为:%d的圆盘从%c圆柱移动到%c的圆柱上\n", n, x, z);
}
void hanoi(_ElemType n, _ElemChar x, _ElemChar y, _ElemChar z)
{
if(1 == n)
move(x, 1, z); //将编号为1的圆盘从x至z
else
{
hanoi(n - 1, x, z, y);//将X上的编号为1至n-1的圆盘移动到Y,Z作辅助塔
move(x ,n,z); //将编号为n的圆盘从X移动到Z
hanoi(n - 1, y, x, z);//将Y上的编号为1至n-1的圆盘移动到Z,X作辅助塔
}
}
int main(int argc, char *argv[])
{
_ElemType n;
_ElemChar X, Y, Z;
X = 65;
Y = 66;
Z = 67;
printf("请输入圆盘数:");
scanf("%d", &n);
printf("\n");
hanoi(n, X, Y, Z);
return 0;
}