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++。我对这个程序有一个困惑。我们正在使用一个具有void返回类型的函数。我们正在使用return. 如果return这个程序不返回任何值,它会做什么?

4

10 回答 10

3

如果后面不指定任何值return,则表示返回void

return; 

不会返回任何与函数声明的void返回类型相匹配的东西quicksort。这也意味着在这种情况下它将返回给quicksort函数的调用者。

于 2013-04-29T17:01:56.150 回答
3

如果小于或等于 1,则从函数“返回”到调用函数。它基本上告诉您,如果不是 2 或更大,则继续毫无return意义。rr

另请参阅如果 void() 不返回值,我们为什么要使用它?

于 2013-04-29T16:58:50.117 回答
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是为了不继续执行其余的功能。

正如它的名字所说..它从函数返回。

返回后的代码不会运行。

(阅读其他 100 个答案,您将永远不会忘记这一点)。

于 2013-04-29T16:58:50.140 回答
2

return部分只是一个提前终止命令。如果r<=1为真,它将停止该函数,并阻止其余代码运行。这段代码的要点是,如果您有一个或零个元素,则不需要排序。

于 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只是从函数中退出并返回给它的调用者。然后控制流从下一条指令或表达式求值继续。

另请注意,从void-returning 函数的末尾流出等效于return如下语句:

return;
于 2013-04-29T16:59:09.297 回答
1

看到这个答案:我可以在 void 函数中返回吗?

在这种特定情况下,我的猜测是作者打算这样做是为了停止进一步执行该功能。

于 2013-04-29T16:59:13.857 回答