【问题标题】:Why am i getting different output if I use "return"?如果我使用“return”,为什么会得到不同的输出?
【发布时间】:2021-04-19 08:34:11
【问题描述】:

为什么在递归调用 BubbleSort 函数之前需要使用 return 语句?

没有返回语句:没有输出

void BubbleSort(int arr[], int n, int j)
{
    if(n == 1)
        return;

    if(j == n - 1)
    {
        BubbleSort(arr, n - 1, 0);
    }

    if(arr[j] > arr[j + 1])
    {
        swap(arr[j], arr[j + 1]);
    }

    BubbleSort(arr, n, j + 1);
    return;
}

with return 语句:给出正确的输出

void BubbleSort(int arr[], int n, int j)
{
    if(n == 1)
        return;

    if(j == n - 1)
    {
        return BubbleSort(arr, n - 1, 0);
    }

    if(arr[j] > arr[j + 1])
    {
        swap(arr[j], arr[j + 1]);
    }

    BubbleSort(arr, n, j + 1);
    return;
}

【问题讨论】:

  • 如果你不使用return,当最新的递归函数返回时,你会让你的程序继续执行,它将执行位于函数底部的BubbleSort(arr, n, j + 1)

标签: recursion void


【解决方案1】:

通过指定return 关键字,我们可以确保程序的控制权将转移到其调用者。

BubbleSort(arr, n - 1, 0);

当您执行此操作时,如果没有 return 关键字,它会调用 self 并且控件不会返回给它的调用者,因此其余代码也会执行,它确实会改变原本不打算的业务,您可能会遇到一些混乱的事情到你的结果。

以下 sn-p 可能会帮助您更好地理解它:

if(j == n - 1)
{
    BubbleSort(arr, n - 1, 0);
    return; // returns to it caller.
}

【讨论】:

    猜你喜欢
    • 2022-10-13
    • 2015-04-06
    • 2014-08-14
    • 2021-06-14
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多