2016-05-20 67 views
-4

我試圖產生一系列前術語 https://oeis.org/A004207Java程序遞歸不工作

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; 
      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)); 
     } 
    } 
} 

該代碼的代碼產生錯誤的輸出

1 
1 
2 
3 
5 
8 
13 
21 
34 
+0

那些人下來投票,請評論的反對投票 – karu

+0

我投票關閉這一問題作爲題外話,因爲OP沒有按」的原因期待任何人的回答。 –

+0

@AndyTurner 1 + 1 + 2 + 4 + 8 + 16,其中16 = {1 + 6} = 7 – karu

回答

2

它很難說究竟是你的代碼錯誤,但它不遵循公式:

對於n> 1,(N)=的數字的(N-1)+總和一個(N-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 
    } 
} 

所以,當你從0開始:

for (int i = 0; i <= 10; i++) { 
    System.out.println(getSum(i)); 
} 

您將看到:

1 
1 
2 
4 
8 
16 
23 
28 
38 
49 
62 

兩個主要您的代碼存在問題:

  1. total += total + number%10;雙總和
  2. getSum(number - 2)應該使用-1
+0

那麼問題在哪裏? – karu

+0

@卡魯你執行了錯誤的公式 –

+0

好的。我現在明白了。我不明白遞歸失敗的地方。 – karu