该功能的含义是什么?它有两个返回命令可以吗?

时间:2018-12-28 15:22:33

标签: c return

此代码有什么作用?为什么它有两个返回值?

int MSum(int N){
   if (N == 1)
       return 1;
   return N + MSum(N - 1);
}

我尝试编写运行该程序的程序。它可以正常编译,但是运行时出现错误:

#include <stdio.h>
int MSum(int N);

int main(){
    int n, o;
    printf("Εισάγετε ακέραιο: ");
    scanf("%d", &n);
    o = MSum(n);
    printf("%d", o);
    return 0;
}

int MSum(int N){
    if (N == 1)
        return 1;
    return N + MSum(N - 1);
}

我得到的错误是:

/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status

2 个答案:

答案 0 :(得分:2)

具有多个return语句与您收到的错误无关。就您而言,

if (N == 1)
    return 1;
return N + MSum(N - 1);

相同
if (N == 1)
{                        //block starts
    return 1;
}                       //block end
return N + MSum(N - 1);

因此,return 1;语句位于条件块下,并且仅在满足条件时才执行。

关于您看到的错误,this可能会有所帮助。

答案 1 :(得分:0)

该函数的含义是对从1N的所有数字求和,其中N是传递的参数。当N != 1时,该函数递归调用自身以通过将N加到最多N-1的数字之和来获得总和。顺便说一句,您发布的代码可以在我的系统中完美编译并运行(没有任何动静),因此您可能尚未测试过发布的代码,并且与测试过的代码不同。尝试通过以下方式进行编译:

cc -o pru pru.c

其中pru是程序名称,pru.c是您具有代码的文件。

这是一个测试如何在C中使用递归函数的练习。但是,如果您不知道可以在同一函数中使用两个不同的return语句,则您尝试在函数中过快学习C语言。 C中的递归比return语句更高级。我建议您阅读"The C programming language", from Brian Kernighan and Dennis Ritchie