因为汉罗塔的个数如果为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后的结果数组
由于当汉罗塔多了之后后面的数字会很大,有可能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+