首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这段代码显示“控制到达非空函数末尾[-Werror=return-type]”错误?

为什么这段代码显示“控制到达非空函数末尾[-Werror=return-type]”错误?
EN

Stack Overflow用户
提问于 2021-08-14 14:12:52
回答 2查看 54关注 0票数 0

我尝试编程递归地将第n个数字的前三个数字相加,直到得到第n个值

例如:

func(n) ={如果n= 1,则返回a;如果n=2,则返回b;如果n=3,则返回c;如果n>3,则返回func(n - 1) + func( n- 2) + func( n- 3) }}

代码语言:javascript
复制
int find_nth_term(int n , int a ,int b,int c)
{
 if (n == 2)
 {
  return b;
  
 }
 else if (n == 1)
 {
  return a;
 }
 else if (n == 3)
 {
   return c;
 }
 else if (n > 3)
 {
   int temp = a + b +c;
   a= b;
   b = c;
   c = temp;
   return find_nth_term(n-1, a ,b,c);
 }
}


 int main() {
    int n, a, b, c;
  
    scanf("%d %d %d %d", &n, &a, &b, &c);
    int ans = find_nth_term(n, a, b, c);
 
    printf("%d", ans); 
    return 0;
EN

回答 2

Stack Overflow用户

发布于 2021-08-14 14:19:42

如果n上的任何条件都不成立,例如当n为负值时,函数的执行将到达最后的大括号,而不会返回任何值。

这里最重要的观察是,没有必要将elsereturn结合使用。函数要么返回,要么继续。一个包含一些随机数的示例:

代码语言:javascript
复制
int some_function(int n)
{
    if (n == 1)
        return 5;

    if (n > 3)
        return 11;

    if (n < 100)
        return 41;

    return -1;
}
票数 0
EN

Stack Overflow用户

发布于 2021-08-14 15:01:17

函数必须返回int

看看你的代码,把重点放在ifelse-if块上。如果n是1,2,3或更大并且return某物,则这些块匹配。但是,如果n为0或小于0怎么办?它返回什么?如果数据块缓存了它,那会是什么呢?这就是编译器抱怨的原因。在所有情况下,函数都必须返回某些内容。

因此,您必须在最后一个函数块之后添加一个else块,或者可以在函数块的底部添加一个return表达式。比如return -1

代码语言:javascript
复制
 else if (n > 3)
 {
   int temp = a + b +c;
   a= b;
   b = c;
   c = temp;
   return find_nth_term(n-1, a ,b,c);
 } else {
   return -1;
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68784084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档