【发布时间】:2014-10-19 20:24:42
【问题描述】:
我有一些代码需要运行一些相当大的数字,它涉及递增到递归方法,因此速度非常慢,以至于我什至无法得到我想要的答案。有人可以帮我优化吗?不过我是初学者,所以我不能做任何非常复杂/困难的事情。
public class Euler012{
public static void main(String[]args){
int divisors=0;
for(long x=1;divisors<=501;x++){
divisors=1;
long i=triangle(x);
for(int n=1;n<=i/2;n++){
if(i%n==0){
divisors++;
}
}
//System.out.println(divisors+"\n"+ i);
System.out.println(i+": " + divisors);
}
}
public static long triangle(long x){
long n=0;
while(x>=0){
n+=x;
x--;
triangle(x);
}
return n;
}
}
【问题讨论】:
-
三角形(x)应该返回什么?其中的递归调用似乎是一个错误,因为您总是使用相同的 x 值调用它,所以它会导致无限递归。
-
@Eran - 该值在递归调用之前递减。
-
@DonRoby 哦,我明白了。但是,OP 仍然没有对
triangle的返回值做任何事情,那么递归调用的意义何在? -
@Eran - 这是真的,很可能是他的问题的一部分。
-
@Eran 函数返回序列中的下一个“三角形”数字。 (在while循环之后使用return语句)。三角形数 n 是直到并包括 n 在内的每个数的总和。
标签: java optimization recursion