0

大学の離散構造クラスでは、以下の式を解くメソッドを作成する必要があります。  

s[0] = 1

s[n-1] = s[n-2] + n for all n >= 2

残念ながら、これまで再帰的なメソッドをあまり実装したことがないので、何をしているのかよくわかりません。いつものように物事が「クリック」していません。

可能な限り助けていただければ幸いですが、他の人の作品を単にコピーペーストするのではなく、これを完全に理解したいと思います。

n = 8 の場合にこのメソッドが達成すべきことの基本的な例...

1 + 2 = 3

3 + 3 = 6

6 + 4 = 10

10 + 5 = 15

15 + 6 = 21

21 + 7 = 28

28 + 8 = 36、私たちの答えです。

このNONを再帰的に解決するメソッドを作成したので (以下を参照)、その背後にある数学を理解しています。

public static int sequenceNonRecursive(int n){
    int[] s = new int[n];
    s[0] = 1;

    if(n >= 2){
        for(int i = 1; i < n; i++){
            s[i] = s[i-1] + i + 1;
        }
    }
    return s[n-1];
}

編集:解決しました。助けてくれてありがとう、みんな!私の答えは以下をご覧ください。

4

6 に答える 6

0

コードを次のように構成します (ヒントを与えるだけで、残りの問題を理解する必要があります)。

public static int sequenceRecursive(int n){
    if( n == 0 )
        //return something....
    else
        //return something else, which recursively relies on previous values of sequenceRecursive()
}
于 2013-09-18T23:04:53.203 に答える
0

わかった、みんな。助けてくれてありがとう!これがどれほどばかげて単純だったのか信じられません。それを理解するとすぐに、私は自分自身に強力なフェイスパームを与えました。これで再帰を理解できたと確信しています。

public static int sequenceRecursive(int n){
       if( n == 0 )
            return 0;
        else
            return n + sequenceRecursive(n-1);
}
于 2013-09-20T02:22:53.020 に答える
0

再帰は、元の問題を下位の問題に分解して、それらを解決しようとするようなものです。まず、基本ケース(あなたの場合はn=0)を理解する必要があります。n > 0これで先に進み、基本ケースに分解してケースを処理する方法を確認できます。nその後n-1n-2基本ケースに到達するまでのシーケンスを作成することが、この問題を再帰的に解決するための鍵となります。

于 2013-09-18T23:10:06.387 に答える
0

最初に、2 番目の方程式のすべての に 1 を追加しましょうn: (それらを増やす場合は、範囲を減らす必要があり、それが正しいことは自明であることを確認します)

s[0] = 1
s[n] = s[n-1] + (n+1) for all n >= 1

なぜ私たちはこれをしたいのですか?
つまり、関数定義はsequence(int n)であり、 ではありませんsequence(int n-1)

ここs[i]では、入力パラメーターを使用して関数を呼び出すことに対応していますi

そして、コードの基本的な考え方:

public static int sequence(int n){
    if (/* base case */)
        // return value for base case
    else
        // return other case, includes calling sequence(x) for some x
}

それがあなたに十分な仕事を与えることを願っています。

于 2013-09-18T23:10:09.497 に答える
0

実際にはもっと簡単です。メソッドがすべての n に対して機能し、n がゼロでない限り (基本ケース) 使用することを想像してください。

sequenceRecursive(n-1)

前の数値の値を取得し、それが機能することを期待します。(そしてそうなるでしょう)

内部では、基本ケースまで再帰し、呼び出しが返されるときに値を構築します。

于 2013-09-18T23:14:05.817 に答える