2017-10-16 11 views
0
DRoot dRoot = new DRoot(); 
    System.out.println("Answer from main : " + dRoot.digital_root(493193)); 

デジタルルートは数値のすべての桁の再帰的な合計です。 nが与えられると、nの桁の和を取る。その値が2桁の場合は、このように1桁の数字が生成されるまで縮小し続けます。これは自然数にのみ適用されます。if/elseを介して値を返そうとしています

public class DRoot { 
    public static int digital_root(int num) 
    { 
     String temp = Integer.toString(num); 
     int a[] = new int[temp.length()]; 
     int output = 0; 

     for(int i = 0; i < temp.length(); i++) //getting individual numbers from passed in integer 
     { 
      a[i] = Integer.parseInt(temp.substring(i, i+1)); 
     } 

     for (int i = 0; i < a.length; i++) //sum of all digits in the number 
     { 
      output += a[i]; 
     } 
     if(String.valueOf(output).length() != 1) 
     { 
      digital_root(output); 
     } else { 
      return output; 
     } 
     return 0; 
    } 
} 

あなたが上見ることができるように、私はしかし、「出力の値が1に等しくない場合、その後digital_root(output);を返す」テストする場合はelse文を通じて一桁の番号を返すようにしようとしてきた、この戻りは」doesnの代わりにそれは私が戻ってくるエラーをクリアするためにそこに置いたリターンから0を返しています。この問題のお手伝いは?おかげ

答えて

2

変更このライン digital_root(output);return digital_root(output);

また、あなたが内に再帰呼び出しを行っているからだと

0
if(String.valueOf(output).length() != 1) 
    { 
     return digital_root(output); 
    } else { 
     return output; 
    } 
0

を行うことができ、他の最適化が存在する場合の条件と出力変数をオーバーライド。

たとえば、関数に入力1234を渡すと、最初の呼び出し時に出力は10になり、長さが1に等しくない場合、再帰呼び出しを行い、1に変換して返しますが、再帰呼び出しが失われている間に、メソッド呼び出しが出力の値を終了したため、返された1を収集していません。したがって、出力はまだ10になると、それは最後のステートメントに移動し、0

を返しますならば、それはすでに実行されるようなので、より良い解決策は、結果に

int result = 0; 

if(String.valueOf(output).length() != 1) 
{ 
    result = digital_root(output); 
} else { 
    result = output; 
} 

return result; 
を収集するために変数を使用することです
関連する問題