【发布时间】:2012-12-12 23:56:01
【问题描述】:
我编写此代码的目的是每次调用recurse() 时都会增加链。但是,每次recurse() 达到返回值时(根据我在调试器中看到的情况),它都会这样做;它会减少b 的值。如果您想了解我正在尝试做的事情的背景,这是项目 euler #14。
http://projecteuler.net/problem=14
private static void euler14()
{
int currentstart=1000000;
int longest = 0;
int current=0;
Integer chain=0;
for(int i = currentstart; i>0; i--)
{
recurse(i,chain);
if(chain > current)
{
current=chain;
longest=i;
}
chain = 0;
}
System.out.print("Euler 14: " + longest + "\n");
}
private static void recurse(int a, Integer b)
{
b++;
if(a==1)
{
return;
}
else if(a%2==0)
{
recurse((a/2), b);
}
else if(a%2==1)
{
recurse(((a*3)+1), b);
}
return;
}
【问题讨论】:
-
我找不到问题。无论如何,这个
recurse(i,chain);永远不会改变chain的值,因为Integer是不可变的。我想你认为recurse()内部的b++;会改变它,但这只会影响局部变量b;
标签: java return pass-by-reference void