首页 > 编程知识 正文

递归 汉诺塔 C语言

时间:2023-05-05 17:50:02 阅读:194876 作者:1727

# include <stdio.h>/*递归:条件:1. 有正确(明确)的终止条件2. 该函数处理的数据规模必须递减3. 这个转化必须是可解的特点:易于理解速度慢存储空间大1.汉诺塔(3个柱子,A, B, C,所有的盘子在A上,将A上的所有的盘子借助B 移动到C 上)伪代码:如果是一个盘子直接将A柱子上的盘子从A 移动到 C否则先将 A 上的n-1 个盘子借助 C 移动到 B 上将 A 上的盘子从 A 移动到 C最后将 B上的n-1 个盘子借助 A 移动到 C上*///汉诺塔 (3个柱子,A, B, C,所有的盘子在A上,将A上的所有的盘子借助B 移动到C 上)/*伪代码:如果是一个盘子直接将A柱子上的盘子从A 移动到 C否则先将 A 上的n-1 个盘子借助 C 移动到 B 上将 A 上的盘子从 A 移动到 C最后将 B上的n-1 个盘子借助 A 移动到 C上*/void hannuota(int n ,char c1, char c2, char c3) { //3个柱子,A(c1), B(c2), C(c3),所有的盘子在A上,将A上的所有的盘子借助B 移动到C 上 //第一个参数代表需要移动的盘子的总个数,第二个参数代表原始盘子位置,第三个参数代表辅助位置, //第四个参数代表目标位置if(n ==1 ) { //情况1printf("将编号为%d的盘子,从%c 移动到 % cn",n, c1, c3);}else { //情况2hannuota(n - 1 ,c1, c3, c2); // 先将 A 上的n-1 个盘子借助 C 移动到 B 上printf("将编号为%d的盘子,从%c 移动到 % cn",n, c1, c3); //将 A 上的盘子从 A 移动到 Channuota(n - 1 ,c2, c1, c3); //最后将 B上的n-1 个盘子借助 A 移动到 C上}}int main(void) {printf("n汉诺塔:n");hannuota(5 ,'A', 'B', 'C');return 0;}

结果:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。