其他分享
首页 > 其他分享> > 递归——汉诺塔问题

递归——汉诺塔问题

作者:互联网

递归的两个特点

#include<stdio.h>

void func1(int x)	//没有结束条件,不是递归
{
	printf("%d", x);
	func1(x - 1);
}

void func2(int x)	//没有结束条件,不是递归
{
	if (x > 0)
	{
		printf("%d", x);
		func2(x + 1);
	}
}

void func3(int x)	//递归结果:321
{
	if (x > 0)
	{
		printf("%d", x);
		func3(x - 1);
	}
}

void func4(int x)	//递归结果:123
{
	if (x > 0)
	{
		func4(x - 1);
		printf("%d", x);
	}
}

int main()
{
	//func1(3);
	//func2(3);
	func3(3);
	func4(3);

	return 0;
}

递归实例:汉诺塔问题


当n=2时


 n个盘子时


#include<stdio.h>

void hanoi(int n, char A, char B, char C)
{
	if (n > 0)
	{
		hanoi(n - 1, A, C, B);	//第一步
		printf("moving from %c to %c\n", A, C);	//第2步
		hanoi(n - 1, B, A, C);	//第三步
	}
}

int main()
{
	hanoi(3, 'A', 'B', 'C');

	return 0;
}

输出结果
moving from A to C
moving from A to B
moving from C to B
moving from A to C
moving from B to A
moving from B to C
moving from A to C

标签:递归,int,void,问题,圆盘,moving,printf,汉诺塔
来源: https://blog.csdn.net/m0_62080641/article/details/122146997