Java程序递归不起作用
我正试图产生一系列的数字和之前的条款 1,1,2,4,8,16,23,28,38,49,62,70,77,91,101,103,107,115,122,127 这是我的密码Java程序递归不起作用,java,math,recursion,Java,Math,Recursion,我正试图产生一系列的数字和之前的条款 1,1,2,4,8,16,23,28,38,49,62,70,77,91,101,103,107,115,122,127 这是我的密码 import java.math.BigInteger; import java.util.ArrayList; public class Problem { public static int getDigitSum(int number) { int total = 0;
import java.math.BigInteger;
import java.util.ArrayList;
public class Problem {
public static int getDigitSum(int number) {
int total = 0;
while ( number>0) {
total += total + number%10;
number = number /10;
}
return total;
}
public static int getSum(int number) {
if ((number == 0) || (number == 1)) // base cases
return number;
else
// recursion step
return getSum(getDigitSum(number - 1)) + getSum(number - 2);
}
public static void main( String s []) {
int sum =0, difference=1, previous =1, last;
//ArrayList <Integer> sum_list = new ArrayList <Integer>();
//sum_list.add(prevous);
for (int i = 1; i<10; i++) {
System.out.println(getSum(i));
}
}
}
很难说代码到底出了什么问题,但它并没有遵循以下公式: 对于n>1,an=an-1+an-1的位数之和 因此,您的代码应该如下所示:
public static int getDigitSum(int number) {
int total = 0;
while (number > 0) {
total += number % 10;
number /= 10;
}
return total;
}
public static int getSum(final int number) {
if (number <= 1) {
return 1;
} else {
final int sum = getSum(number - 1); // a(n-1) from formula
return sum + getDigitSum(sum); // sum of digits of a(n-1) from formula
}
}
您的代码存在两个主要问题:
总数+=总数+数量%10;双倍和
getSumnumber-2应使用-1
那些投反对票的人,请评论投反对票的原因我投票结束这个问题,因为OP不希望任何人回答。@AndyTurner 1+1+2+4+8+16,其中16={1+6}=7@AndyTurner我想karu的意思是:我不希望你为我写工作代码,但是你能解释一下为什么我的代码不起作用吗?FAQ告诉你为什么投票失败:为什么我的代码不起作用?那么问题出在哪里?@karu你实现了错误的公式OK。我现在明白了。我不明白递归在哪里失败了。
public static int getDigitSum(int number) {
int total = 0;
while (number > 0) {
total += number % 10;
number /= 10;
}
return total;
}
public static int getSum(final int number) {
if (number <= 1) {
return 1;
} else {
final int sum = getSum(number - 1); // a(n-1) from formula
return sum + getDigitSum(sum); // sum of digits of a(n-1) from formula
}
}
for (int i = 0; i <= 10; i++) {
System.out.println(getSum(i));
}
1
1
2
4
8
16
23
28
38
49
62