此代码有什么作用?为什么它有两个返回值?
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
答案 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)
该函数的含义是对从1
到N
的所有数字求和,其中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。