当我遇到这个问题时,我正忙于 projecteuler 的问题 151,http ://projecteuler.net/problem=151。
我正在尝试使用 ArrayList envelope
(仅包含 2 的幂)和 intindex
作为参数进行简单的递归。它首先用它下面的所有 2 的幂替换包络位置的整数index
(例如,16 变为 8、4、2、1)。然后它将索引从 0 循环到新的末尾,envelope
并以新包络和新索引作为参数应用相同的递归,直到包络等于 {1}。假设我正在计算可以做到这一点的方法的数量。这是代码:
import java.util.ArrayList;
public class Prob151 {
public static void main(String[] args) {
totalCount = 0;
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(8);
recursion(list,0,1);
System.out.printf("%d",totalCount);
}
public static int totalCount;
public static void recursion(ArrayList<Integer> envelope, int index, int batch) {
int number = envelope.get(index);
if (envelope.size() == 1 && number == 1) {
totalCount += 1;
} else {
// Updates the envelope
envelope.remove(index);
while (number > 1) {
number /= 2;
envelope.add(number);
}
batch += 1;
for (int i = 0; i < envelope.size(); i++) {
// Displays current information
System.out.printf("batch = %d, envelope = {",batch);
for (int j : envelope) {
System.out.printf("%d,",j);
}
System.out.printf("}, i = %d\n",i);
recursion(envelope,i,batch);
}
}
}
}
这是我得到的输出:
batch = 2, envelope = {4,2,1,}, i = 0
batch = 3, envelope = {2,1,2,1,}, i = 0
batch = 4, envelope = {1,2,1,1,}, i = 0
batch = 5, envelope = {2,1,1,}, i = 0
batch = 6, envelope = {1,1,1,}, i = 0
batch = 7, envelope = {1,1,}, i = 0
batch = 8, envelope = {1,}, i = 0
1
它没有返回索引 i = 1 的第 7 批,而是在遇到信封 = {1} 的第一个实例后停止。为了获得所需的结果,我应该改变什么?
提前致谢!