2012-03-14 14 views
3

これはこれまでの私のコードです。intの数字の合計を返す再帰的なメソッドを書くには?

public int getsum (int n){ 
     int num = 23456; 
     int total = 0; 
     while (num != 0) { 
      total += num % 10; 
      num /= 10; 
     } 
    } 

問題は、私は再帰を使用して新しいの再帰的方法 イムの種類にこれを変更する方法を知っていると私はその再帰的にそれを変更するには、このメソッドを実装する上でいくつかの助けが必要/カントということです。

+1

、再帰的な方法の世界で開始するあなたが定義する必要があります。1.基本ケース(!この場合はNUM = 0)、あなたは_many_回実行する必要があるコードの2部分を、3あなたの入力パラメータ、4.あなたの出力。試してみて、提案されたソリューションで質問を編集してください。 –

+2

あなたのプロフィールを見ると、再帰に関連する問題がたくさんあるようです。なぜ良いプログラミングの本を取得し、試行錯誤で学び始めないのですか? – Nishant

答えて

6

ここでは、動作中の機能の一例、

//sumDigits function 
int sumDigits(int n, int sum) {  
    // Basic Case to stop the recursion 
if (n== 0) { 
     return sum; 
    } else { 
     sum = sum + n % 10; //recursive variable to keep the digits sum 
     n= n/10; 
     return sumDigits(n, sum); //returning sum to print it. 
    } 
} 

です:

public static void main(String[] args) { 
    int sum = sumDigits(121212, 0); 
    System.out.println(sum); 
} 
+0

+1テール再帰のために+1。短いバージョン: int sumDigits(int n、int sum){ return(n == 0)? 0:n%10 + sumDigits(n/10、sum + n%10)。 } –

0

このお試しください:再帰

int getSum(int num) 
{ 
    total = total + num % 10; 
    num = num/10; 
    if(num == 0) 
    { 
     return total; 
    } else { 
     return getSum(num); 
    } 
} 
+0

コードをフォーマットしました。 –

13

ショートをし、仕事をしていません:

int getsum(int n) { 
    return n == 0 ? 0 : n % 10 + getsum(n/10); 
} 
0
int getSum(int N) 
{ 
    int totalN = 0; 

    totalN += (N% 10); 
    N/= 10; 

    if(N == 0) 
     return totalN; 
    else 
     return getSum(N) + totalN; 
} 
0
public static int digitSum (int n) 
    { 
    int r = n%10;  //remainder, last digit of the number 
    int num = n/10;  //the rest of the number without the last digit 
    if(num == 0) 
    { 
     return n; 
    } else { 
     return digitSum (num) + r; 
    }} 
+0

これは解説のないコード専用の回答です。変更した内容と変更した理由について説明してください。 – siride

0

これは正の数で機能します。

public int sumDigits(int n) { 
    int sum = 0; 
    if(n == 0){ 
    return 0; 
    } 
    sum += n % 10; //add the sum 
    n /= 10; //keep cutting 
    return sum + sumDigits(n); //append sum to recursive call 
} 
-1
#include <iostream> 
int useRecursion(int x); 
using namespace std; 

int main(){ 
    int n; 
    cout<<"enter an integer: "; 
    cin>>n; 
    cout<<useRecursion(n)<<endl; 
    return 0; 
} 

int useRecursion(int x){ 
    if(x/10 == 0) 
     return x; 
    else 
     return useRecursion(x/10) + useRecursion(x%10); 
} 
0
import java.util.Scanner; 
public class Adder { 
    public static void main(String[] args){ 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter a number: "); 
     System.out.println(); 
     int number = input.nextInt(); 
     System.out.println("The sum of the digits is " +adder(number)); 

    } 
    public static int adder(int num){ 
     int length = String.valueOf(num).length(); 
     int first , last , sum; 
     if (length==1){ 
      return num; 
     } 
     else 
     { 
      first = num /10; 
      last = num % 10; 
      sum = last + adder(first); 
     } 
     return sum; 
    } 
} 
1
public static int sumOfDigit(int num){ 
    int sum=0; 
    if (num == 0) 
    return sum; 
      sum = num%10 + sumOfDigit(num/10); 
    return sum; 
} 
public static void main(String args[]) { 
    Scanner input=new Scanner(System.in); 
    System.out.print("Input num : "); 
    int num=input.nextInt(); 
    int s=sumOfDigit(num); 
    System.out.println("Sum = "+s); 
} 

}

+0

質問者が問題を理解するために、回答にいくつかの説明を追加してください。 – Sampada

+0

あなたの答えで詳細を説明してください – Mostafiz

-1

私はそれは、これまで最短だと思います。しかし、入力されたものがあなたもアップしています。

public static int getSum(int input) { //example: input=246 
     int sum=0; 
     if (input%10==input) { //246%10=6; 
       return input%10; //2%10=2 
     } 

     return input%10+getSum((input-input%10)/10); //(246-6)/10=24; 24%10=4 
} 
2
public int sumDigits(int n) { 
    return (n - 1) % 9 + 1; 
} 
+0

このメソッドは再帰的ではありません! – Ozgur

+0

けれども、より速く、短くなります。 – VolkanSahin45

関連する問題