第二周项目三汉诺塔
来源:互联网 发布:创业软件官网 编辑:程序博客网 时间:2024/05/31 19:18
问题及代码
/* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:汉诺塔.cpp *作 者:李浩 *完成日期:2015年9月11日 *版 本 号:v1.0 * *问题描述:现在有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问至少需要多少次移动?*输入描述:盘子的个数*程序输出: */ #include <stdio.h>#define discCount 4long 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),即输出结果
学习心得:
汉诺塔就是把n-1个饼移到B,再把第n个饼移到C,最后把n-1个饼移到C,这种计算极为复杂,运用合适的方式才能够得到很专业的计算。
0 0
- 第二周项目三汉诺塔
- 第二周项目1
- 第二周项目2
- 第二周项目三
- 第二周项目6
- 第二周项目一
- 第二周项目二
- 第二周项目三
- 第二周项目一
- 第二周项目二
- 第二周项目一
- 第二周项目四
- 第二周项目二
- 第二周项目1
- 第二周项目5
- 第二周项目1
- 第二周项目2
- 第二周项目3
- Google Java编程风格指南
- 第三周项目1-顺序表的基本运算(2)
- 2015-9-11 项目3 - 体验复杂度 (2)汉诺塔
- 对象的软、弱和虚引用
- ReThought (二): 如何照顾团队中的新人
- 第二周项目三汉诺塔
- 第二周 项目1-C/C++语言中函数参数传递的三种方式
- 操作数类型冲突: int 与 date 不兼容
- 第二周项目1 c/c++语言中函数参数传递的三种方式
- 项目1--C/C++语言中函数参数传递的三种方式
- 第二周项目2程序的多文件组织
- 第2周项目2 程序的多文件组织
- 第二周上机实践—项目“0”—宣告主权
- eclipse and idea for mac 常用快捷键