1

この例で再帰がどのように機能するかを理解しようとしているだけです。誰かがこれを分解してくれれば幸いです。基本的に配列内の最大要素を返す次のアルゴリズムがあります。

int MaximumElement(int array[], int index, int n)
    {  
        int maxval1, maxval2; 
        if ( n==1 ) return array[index];
        maxval1 = MaximumElement(array, index, n/2); 
        maxval2 = MaximumElement(array, index+(n/2), n-(n/2));
        if (maxval1 > maxval2)
            return maxval1;
        else
            return maxval2;
    }

ここで再帰呼び出しがどのように機能するか理解できません。2 番目の呼び出しが行われているときに、最初の再帰呼び出しは常に実行されますか? 誰かが私にこれを説明してくれれば、本当に感謝しています。どうもありがとう!

4

3 に答える 3

0

ここで起こっていることは、両方の再帰呼び出しが次々と行われているということです。最初の検索では配列があり、最大値が返されます。2 番目の検索では残りの半分が検索され、最大値が返されます。次に、2 つの最大値が比較され、大きい方の最大値が返されます。

于 2013-09-23T02:04:19.663 に答える
0

はい。あなたが推測したことは正しいです。と の 2 つの再帰呼び出しのうち MaximumElement(array, index, n/2)MaximumElement(array, index+(n/2), n-(n/2))最初の呼び出しは、配列の 1 つの要素で呼び出しが行われるまで繰り返し実行されます。次に、2 つの要素が比較され、最大の要素が返されます。次に、この比較プロセスは、最大の要素が返されるまで続けられます。

于 2013-09-23T02:05:37.730 に答える