递归函数-汉诺塔
-
定义:在函数的内部,直接或者间接的调用自己。
要点:
再定义递归函数时,一定要确定一个“结束条件”!!!
使用场合:
处理一些特别复杂的问题,难以直接解决。
但是,可以有办法把这个问题变得更简单(转换成一个更简单的问题)
-
借助盗梦空间来帮我们来理解递归函数
-
递归函数的缺点:性能很低!!!
实际开发中, 极少使用!
使用递归来解决汉诺塔问题
-
汉诺塔
扫描二维码关注公众号,回复: 12380777 查看本文章规则:中间的棍子可以当助手,但一次只能移动一根棍子,不能把大棍子放在小上面。
使用程序来解决这个问题:
#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;
}