汉诺塔计数 实现输出64个圆盘移动多少次 java代码

因为汉罗塔的个数如果为1,2,3,4;那么对应的移动次数为1,3,7,15相当于2^n-1,也可以说是上一次的结果乘以2加上1就是下一次的结果
由于当汉罗塔多了之后后面的数字会很大,有可能java的类型无法支持如此大的数,也为了可以快速高效的计算出结果,此时就不能用一般的方法统计,这里我采用的是通过数组的方式实现叠加统计
例如:a[] = {0,0,1,4}表示4位数,结果是14 如果要当其中某一位出现大于10的就向前一位进1,例如{0,2,23,11,3}得出的结果实际上应该是{0,4,4,1,3}:4413
如果这个数需要乘以一个数那么就和每一位上的相乘最后进位,例如:{0,6,2}*2={0,12,4}={1,2,4}=124这样的道理
最后用一个字符串来得出最后的结果数字就可以了
下面的程序a[]表示用于统计的结果,是一个字符串数组,b[]表示上一个的结果数组,c[]表示乘以2减去1后的结果数组

public class 汉罗塔计数 {
	// N为多少个圆盘
	public static int N = 64;//这里可以自己修改

	/**
	 * 处理结果
	 * @param a 得到的每一次运算的结果数组
	 * @param c 得到当前移动的次数的数组(也就是上一次的结果)
	 * @param n 递归次数的变量
	 */
	public static void processResult(String a[], int c[], int n) {
		//首先判断递归次数是否小于制定的汉罗塔的个数-1(n从0开始的)
		if (n < N - 1) {
			for (int i = 0; i < N; i+
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值