当我尝试使用 return 关键字 运行 递归程序时收到警告

I get a warning when I try to run the recursion program with return keyword

我期待 1 2 3 作为输出,但是当我尝试 运行 这个代码时:

#include <iostream>
using namespace std;

int fun(int x){
    if (x>0){
        return fun(x-1);
        cout<<x<<endl;
    }
}

int main()
{
    int x=3;
    fun(x);
    return 0;
}

我收到此警告:

warning: control reaches end of non-void function

为什么不 return 值并调用 fun(x-1)

但是下面的代码工作得很好。我得到 3 2 1 作为输出。

#include <iostream>
using namespace std;

int fun(int x){
    if (x>0){
        cout<<x<<endl;
        return fun(x-1);
    }
}

int main()
{
    int x=3;
    fun(x);
    return 0;
}

函数一旦 return 就不能再执行任何代码:

if (x>0){
    return fun(x-1);
    cout<<x<<endl; // <-- NEVER EXECUTED
}

警告是因为你的函数有一个非 void return 类型,但当 x 是 [=16= 时没有 return 任何值],从而导致 未定义的行为

试试这个:

#include <iostream>
using namespace std;

int fun(int x){
    if (x>0){
        int ret = fun(x-1);
        cout << x << endl;
        return ret;
    }
    return 0;
}

int main()
{
    fun(3);
    return 0;
}

Online Demo