递归函数-汉诺塔

递归函数-汉诺塔

  • 定义:在函数的内部,直接或者间接的调用自己。

    要点:

    再定义递归函数时,一定要确定一个“结束条件”!!!

    使用场合:

    处理一些特别复杂的问题,难以直接解决。

    但是,可以有办法把这个问题变得更简单(转换成一个更简单的问题)

  • 借助盗梦空间来帮我们来理解递归函数

在这里插入图片描述

  • 递归函数的缺点:性能很低!!!

    实际开发中, 极少使用!

使用递归来解决汉诺塔问题

  • 汉诺塔

    规则:中间的棍子可以当助手,但一次只能移动一根棍子,不能把大棍子放在小上面。

在这里插入图片描述

使用程序来解决这个问题:

#include <stdio.h>

void hanoi(int n, char pillar_start[], char pillar_mid[], char pillar_end[]) {
    
    
	if (n == 1) {
    
    
		printf("从%s移动到%s\n", pillar_start, pillar_end);
		return;
	}

	hanoi(n - 1, pillar_start, pillar_end, pillar_mid);
	printf("从%s移动到%s\n", pillar_start, pillar_end);
	hanoi(n - 1, pillar_mid, pillar_start, pillar_end);
}

int main(void) {
    
    
	char name1[] = "A柱";
	char name2[] = "B柱";
	char name3[] = "C柱";
	int n = 3; //盘子数

	hanoi(3, name1, name2, name3);

	return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44695317/article/details/113126189