本文共 889 字,大约阅读时间需要 2 分钟。
所有的循环算法都可以用递归实现,反之不成立,这足以证明递归的重要性!
Hanoi(汉诺)塔问题。古代有一个焚塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在上,小的在下,有一个老和尚想把这64个盘子从A座移到C座,但规定每次只允许移到一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上,在移动过程中可以利用B座。输出移动盘子的步骤。
解:由于64个盘子移动步骤太多,本程序以5个盘子为例进行输出
因为手机浏览器显示代码不好看,我会在这里添加代码的图片和代码 以及效果图图片为:
代码为:
#include "stdio.h"void hanoi(int n,char A,char B,char C) { //设置移动盘子的结束条件,如果A当前还有一个盘子那么就把他直接移动到C if(n == 1) { printf("%c -> %c\n",A,C); }else{ //否则开始递归 hanoi(n-1,A,C,B); printf("%c -> %c\n",A,C); hanoi(n-1,B,A,C); }}int main() { //如果有五个盘子,和A,B,C三个柱子,否则开始递归. hanoi(5,'A','B','C');}
运行结果:
root@Alan:/home/alan/桌面# ./timA -> CA -> BC -> BA -> CB -> AB -> CA -> CA -> BC -> BC -> AB -> AC -> BA -> CA -> BC -> BA -> CB -> AB -> CA -> CB -> AC -> BC -> AB -> AB -> CA -> CA -> BC -> BA -> CB -> AB -> CA -> C
效果图:
转载地址:http://zxhgi.baihongyu.com/