汉诺塔递归结构
来源:互联网 发布:mac软件删除不彻底 编辑:程序博客网 时间:2024/06/05 07:29
汉诺塔递归结构 f(n),n为塔盘数,上图演示的是n为3时的移动方式;(已3为基数,是因为3盘7次是递归的最小因子)
f(3)时;移动方式为 A-C,A-B,C-B,A-C,B-A,B-C,A-C (X,Y,Z)
f(4)时;是将3块圆盘从A-B ,将最后一块A-C,再将3块圆盘从B-C;
f(5)时;是将4块圆盘从A-B ,再最后一块将A-C,再将4块圆盘从B-C;
f(n)时;是将n-1块圆盘从A-B ,再最后一块将A-C,再将4块圆盘从B-C;
#include <stdio.h>void change(char x, char y, char z){printf("%c--%c\n", x, z);printf("%c--%c\n", x, y);printf("%c--%c\n", z, y);printf("%c--%c\n", x, z);printf("%c--%c\n", y, x);printf("%c--%c\n", y, z);printf("%c--%c\n", x, z);return;}int f(int n){if(n > 3) {change('A','C','B');//前面n-1个圆盘从A移到B printf("%c--%c\n", 'A', 'C');<span style="white-space:pre"></span>//圆盘n A--C change('C','A','B');//前面n-1个圆盘从B移到C n = f(n-1);}return n;}int times(int n){if(3 == n)return 7;//n为3时,移动次数else{n = 2 * times(n-1) + 1;return n;}}int main(void){int ht;printf("请输入汉诺塔层数\nht = ");scanf("%d", &ht);if(ht > 3){printf("移动方式为:\n");f(ht);printf("共计移动%d次\n", times(ht));}else if(3 == ht){printf("移动方式为:\n");change('A','B','C');printf("共计移动%d次\n", times(ht)); }elseprintf("请输入大于或者等于3的数字\n");return 0;}
0 0
- 汉诺塔递归结构
- 树结构递归查询
- java 递归树结构
- 递归列出目录结构
- 递归打印目录结构
- 递归结构中的DP
- 递归树结构
- 递归查询表结构
- 递归列出目录结构
- 树形结构递归实现
- 递归树形结构
- 递归显示目录结构
- 递归遍历树结构
- 递归问题与递归结构(二)
- 递归问题与递归结构(三)
- 递归问题与递归结构(四)
- 递归问题与递归结构(五)
- Java基础--递归算法(递归结构)
- freemarker学习笔记(二)
- 目标检测中背景建模方法
- HashSet、TreeSet及泛型
- 解决 windows 8.1 无线网络 连接受限
- 一行盒子,数组表示链表
- 汉诺塔递归结构
- 第五天工作总结
- Rotate Array
- 杭电第5162题----jump jump
- PRKP-1001,CRS-0215 rac 集群无法启动数据库和实例
- cocos2dx菜单重叠按钮实现按层优先选择及透明过滤
- 非递归遍历二叉树
- (蓝桥杯题)基础练习 矩形面积交
- 日志缓冲区(redo log buffer)及日志写进程(LGWR)剖析