2016-05-20 11 views
-4

Ich versuche, eine Reihe von Summe aus Ziffer bisheriger Bedingungen https://oeis.org/A004207Java-Programm Rekursion funktioniert nicht

1, 1, 2, 4, 8, 16, 23, 28, 38, 49, 62 zu erzeugen, , 70, 77, 91, 101, 103, 107, 115, 122, 127,

Dies ist der Code I

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

produzieren

1 
1 
2 
3 
5 
8 
13 
21 
34 
falschen Ausgang Dieser Code erhalten haben 0
+0

Jene Leute, die abstimmen, kommentieren Sie bitte den Grund für die Abwärts – karu

+0

Abstimmung Ich wähle diese Frage zu schließen, wie Off-Topic, weil OP ‚doesn Ich erwarte keine Antwort von irgendjemandem. –

+0

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

Antwort

2

Es ist sehr schwer zu sagen, was genau falsch mit Ihrem Code, aber es folgt nicht Formel:

Für n> 1 a (n) = a (n-1) + Summe der Stellen a (n-1).

so, Code, den Sie sollte wie folgt aussehen:

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

so, wenn Sie von 0 beginnen:

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

Sie sehen:

1 
1 
2 
4 
8 
16 
23 
28 
38 
49 
62 

zwei Haupt Probleme mit Ihrem Code:

  1. total += total + number%10; Doppelsumme
  2. getSum(number - 2) verwenden sollte -1
+0

Wo ist das Problem dann? – karu

+0

@karu Sie haben falsche Formel implementiert –

+0

Ok. Ich hab es jetzt. Ich habe nicht verstanden, wo die Rekursion fehlgeschlagen ist. – karu