首页 > 代码库 > 【hanoi】hanoi移动次数和移动步骤
【hanoi】hanoi移动次数和移动步骤
#include<stdio.h>#include<stdlib.h>//移动次数int hanoi(int num){ static int all = 0; if (num == 1) { return 1; } else { all = hanoi(num - 1) * 2 + 1; } return all;}//移动步骤void hanoi2(int num,char A,char B,char C){ if (num == 1) { printf("%c->%c\n",A,C ); return 1; } else { hanoi2(num - 1,A,C,B); printf("%c->%c\n", A, C); hanoi2(num - 1, B,A , C ); }}void main(){ printf("请输入汉诺塔层数!\n"); int num; scanf_s("%d", &num); printf("\n移动次数=%d\n",hanoi(num)); printf("移动方法如下\n"); hanoi2(num,‘A‘,‘B‘,‘C‘); system("pause");}
追求运行速度最好不用递归,追求代码简洁的话就用递归。
循环能实现的,递归也能实现;用递归能实现的,循环不一定能实现。
注意,在递归前执行的为顺序执行,在递归后执行的顺序为倒序。
【hanoi】hanoi移动次数和移动步骤
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。