1.概念
递归——将一个大的问题分解成比较小的、有着相同形式的问题。递归是一种强有力的思想。在计算机科学的学习中,一个重要的必须学习的概念是递归。递归是一种编程策略,它把一个大的问题分解成具有相同形式的简单问题。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
2.代码
1)递归实现输入字母逆序输出
#include
void print()
{
char a;
scanf("%c", &a);
if (a != '#') print();
if (a != '#') printf("%c", a); //倒着打印出输入字符
}
int main()
{
printf("输入字符,以 # 结束。 \n");
while (1)
{
print();
}
return 0;
}
2)汉诺塔递归算法
#include
//将 n 个盘子从 x 借助 y 移动到 z
void move(int n, char x, char y, char z)
{
if (1 == n)
{
printf("%c--->%c\n", x, z);
}
else
{
move(n - 1, x, z, y); //将n-1个盘子从 x 借助 z 移动到 y
printf("%c--->%c\n", x, z); //将第n - 1个盘子从 x 移动到 z
move(n - 1, y, x, z); //将 n - 1 个盘子从 y 借助 x 移动到 z
}
}
int main()
{
int n;
printf("输入汉诺塔层数:");
scanf("%d", &n);
printf("移动步骤如下:\n");
move(n, 'x', 'y', 'z');
return 0;
}
3.结果