【问题标题】:What is the meaning of this function? Is it ok that it has two return commands?这个函数的意义是什么?它有两个返回命令可以吗?
【发布时间】:2018-12-28 15:22:32
【问题描述】:

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

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

我尝试编写 phollowing 程序来运行它。它编译得很好,但是运行时出错:

#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

【问题讨论】:

  • 你是如何编译这段代码的?
  • @dbush 同上。显示你的编译语句。
  • 您的程序可以在我的系统上正确编译和执行。发帖前你摸过代码吗?它抱怨缺少main() 函数,但你有一个。您是否尝试过发布的代码?我只会在 printf() 调用中添加一个\n,但它是完全合法的代码,并且可以按假设工作。

标签: c return


【解决方案1】:

拥有多个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 可能会有所帮助。

【讨论】:

  • @Austin 也许是this one?
  • @SouravGhosh:在这种情况下它是重复的
【解决方案2】:

函数的意思是将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

【讨论】:

    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 2018-11-10
    • 2020-09-30
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多