第二周项目三-汉诺塔
来源:互联网 发布:浙江师范大学行知学院 编辑:程序博客网 时间:2024/05/01 08:31
问题代码:
/* *Copyright (c)2016,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:程序复杂度.cpp /* *Copyright (c)2016,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:汉诺塔.cpp *作 者:李玲 *完成日期:2016年9月6日 * *问题描述:现在有三根相邻的柱子, 标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘, 现在把所有盘子一个一个移动到柱子B上, 并且每次移动同一根柱子上都不能出现大盘子在小盘子上方, 请问至少需要多少次移动? *输入描述:盘子的个数 *程序输出: */ #include <stdio.h> #define discCount 4 long move(int, char, char,char); int main() { long count; count=move(discCount,'A','B','C'); printf("%d个盘子需要移动%ld次\n", discCount, count); return 0; } long move(int n, char A, char B,char C) { long c1,c2; if(n==1) return 1; else { c1=move(n-1,A,C,B); c2=move(n-1,B,A,C); return c1+c2+1; } }
运行结果;
知识点总结:
我们肯定是把上面n-1个盘子移动到柱子C上,然后把最大的一块放在B上,最后把C上的所有盘子移动到B上,由此我们得出表达式:H⑴ = 1 H(n) = 2*H(n-1)+1 (n>1)那么我们很快就能得到H(n)的一般式: H(n) = 2^n - 1 (n>0),即输出结果
学习心得:
学会运用递归的方式进行程序编程
0 0
- 第二周项目三---汉诺塔
- 第二周项目三-汉诺塔
- 第二周项目三-汉诺塔
- 第二周项目三 汉诺塔
- 第二周项目三:汉诺塔
- 第二周项目三
- 第二周项目三
- 第二周项目三
- 第二周,项目三
- 第二周项目三
- 第二周项目三
- 第二周项目三
- 第二周项目三(2) 汉诺塔
- 第二周 项目三-汉诺塔问题
- 第二周项目三—汉诺塔程序
- 第二周 项目三 (2)汉诺塔
- 第二周项目三.2
- 第二周项目三.1
- Lambda表达式入门
- hdu4111Alice and Bob+SG博弈
- Faster-RCNN+VGG用自己的数据集训练模型
- linux NAND驱动之三:6410平台上的NAND驱动加载
- Android那些你可能没了解过的---碎片化
- 第二周项目三-汉诺塔
- angularjs 笔记之$watch
- linux NAND驱动之四:6410上的NAND读写流程
- 软考网络工程师考试考点
- 设计模式
- Linux常用命令总结
- 编译boost程序出现如下错误fatal error LNK1104: cannot open file 'libboost_system-vc100-mt-gd-1_54.lib'的解决方法
- 嵌入式中的 *(volatile unsigned int *)理解
- RGB、YUV和YCbCr