4
#include<iostream>
using namespace std;

template <class Item>

void quicksort(Item a[], int l, int r)
{
    if (r <= 1) return;

    int i = partition(a, l, r);
    quicksort(a, l,   i-1);
    quicksort(a, i+1, r);
}

このプログラムは、Robert Sedgewick によるAlgorithms in C++から取られています。このプログラムには 1 つの混乱があります。void戻り値の型を持つ関数を使用しています。を使用してreturnいます。return値を返さない場合、このプログラムで何をしますか?

4

10 に答える 10

3

の後に値を指定しない場合はreturn、 return を意味しvoidます。

return; 

void関数の宣言された戻り値の型と一致するものは何も返しませんquicksortquicksortこの場合、関数の呼び出し元に戻ることも意味します。

于 2013-04-29T17:01:56.150 に答える
3

関数内のreturnステートメントは、voidすぐに関数を終了します。ここでは、returnサイズ 0 またはサイズ 1 の配列をソートする場合、関数は何もせず、再帰を続行しないようにステートメントを使用しています。この関数はif、次のようにステートメントを使用して記述することもできます。

template <class Item> void quicksort(Item a[], int l, int r) {
    if (r > 2) {
        int i = partition(a, l, r);
        quicksort(a, l,   i-1);
        quicksort(a, i+1, r);
    }
}

この関数は、元のバージョンの関数と同じ意味を持ちますが、明示的にステートメントを含んでいませんreturn

お役に立てれば!

于 2013-04-29T16:59:22.120 に答える
2

そのreturn部分は単なる早期終了コマンドです。が trueの場合は関数を停止しr<=1、残りのコードが実行されないようにします。このコードのポイントは、要素が 1 つまたは 0 の場合、並べ替える必要がないことです。

于 2013-04-29T16:58:59.933 に答える
2

あなたの例では、 return は関数から抜け出すために、つまり呼び出された場所に戻るために使用されています。

于 2013-04-29T16:59:09.650 に答える
1

実際に値を返すわけではありません。return ステートメントが行うことは、関数を終了することだけです

あなたはしたくない

int i=partition(a,l,r);
qucksort(a,l,i-1);
qucksort(a,i+1,r);

もしも

if(r<=1)

関連して、個人的には、

if(r>1)
{
    int i=partition(a,l,r);
    qucksort(a,l,i-1);
    qucksort(a,i+1,r);
}
于 2013-04-29T16:58:57.213 に答える
1

条件が満たされた場合、その時点で関数を終了するために使用されます。

于 2013-04-29T16:59:05.547 に答える
1

return戻り値の型を持つ関数内のステートメントは、void単純に関数を終了し、呼び出し元に戻ります。その後、制御の流れは次の命令または式の評価から続行されます。

また、-returning 関数の最後から流れることは、次のようなステートメントvoidと同等であることに注意してください。return

return;
于 2013-04-29T16:59:09.297 に答える
1

この回答を参照してください: Can I return in void function?

この特定のケースでは、作成者は関数のそれ以上の実行を停止することを意図していたと推測されます。

于 2013-04-29T16:59:13.857 に答える