您当前的位置: 首页 >  算法

惊鸿一博

暂无认证

  • 3浏览

    0关注

    535博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

递归算法—输入字母逆序输出&汉诺塔递归算法

惊鸿一博 发布时间:2017-05-18 21:46:33 ,浏览量:3

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.结果

关注
打赏
1663399408
查看更多评论
立即登录/注册

微信扫码登录

0.0485s