1

私はこれを理解できないようです。割り切れる特定の数より下の数を数える必要があります。

これが私が試したことです:

public int testing(int x) {
    if (x == 0) {
        System.out.println("zero");
        return x;
    }
    else if ((x % (x-1)) == 0) {
        System.out.println("does this work?");
        x--;
    }

    return testing(x-1);
}

それはうまくいかず、ここからどこへ行くべきかわかりません。誰が何をすべきか知っていますか?

4

6 に答える 6

2

これは間違っていることです:

 public int testing(int x) {

再帰的にしたい場合は、テストする数値と現在チェックしている数値の両方を渡す必要があります。最初のものは再帰によって変化せず、2 番目のものは減少します。(グローバル変数を使用しない限り) 1 つのパラメーターだけで表現することはできません。

于 2013-10-04T23:29:22.227 に答える
0

アルゴリズムに問題があります。再帰は x == 0 の場合にのみ終了することに注意してください。つまり、関数は常に 0 を返します (返された場合)。

さらに、あなたのアルゴリズムは意味がないようです。基本的に、数値のすべての因数を見つけようとしていますが、パラメーターは x の 1 つだけです。

変数に意味のある名前を付けるようにしてください。そうすれば、ロジックが読みやすく、理解しやすくなります。

public int countFactors(int number, int factorToTest, int numFactors)
{
  if (factorToTest == 0) // now you are done
    return numFactors;
  else
    // check if factorToTest is a factor of number
    // adjust the values appropriately and recurse
}
于 2013-10-04T23:29:05.007 に答える
0

ここで再帰を使用する必要はありません。非再帰的な解決策は次のとおりです。

public int testing(int n) {
    int count = 0;
    for (int i = 1; i < n; i++)
        if (n % i == 0)
            count++;
    return count;
}

ところで、おそらくこれを 以外の名前にする必要がありますtesting

于 2013-10-04T23:29:45.073 に答える
0

あなたの問題は、式x % (x - 1)が の「現在の」値を使用していることですx。これは、再帰関数を呼び出すたびに減少します。あなたの条件は までずっと false になります2 % (2 - 1)

ループを使用することforは、このタスクを処理するためのはるかに優れた方法です (エラトステネスのふるいを見てください)。試行中の現在の値。

于 2013-10-04T23:26:45.737 に答える