为什么我在这里得到两个返回值?

时间:2015-07-01 19:24:15

标签: c++ recursion

WNOWAIT

第一个:

int main(){

int recurse(int);
int a=recurse(0);
printf(" return %d",a);
}
第二个:

 int recurse(int c){
//printf("%d", c);
if(c<10){
   recurse(c+1);
}else{
return(c);
} 
}

在第一个..我得到10的返回值,而在第二个我得到返回值为0.为什么我得到两个不同的值,为什么0 ??

3 个答案:

答案 0 :(得分:2)

实际上这个功能

int recurse(int c){
//printf("%d", c);
if(c<10){
   recurse(c+1);
}else{
return(c);
} 
}

具有未定义的行为,因为它在c < 10

的情况下不返回任何内容

此功能

int recurse(int c){
//printf("%d", c);
if(c<10){
   recurse(c+1);
}
return(c);
} 

始终独立于值本身返回参数c的值。该函数具有无条件return语句并返回其参数。因为它被调用时参数等于0然后它返回它。:)

正确的功能将采用以下方式

int recurse( int c )
{
    return c < 10 ? recurse( c + 1 ) : c;
}

当然,如果没有递归,它可以写得更简单:)

int recurse( int c )
{
    return c < 10 ? 10 : c;
}

答案 1 :(得分:0)

我认为这是因为没有第二个中的else,return语句不是if语句的一部分。这意味着它将执行if循环,然后返回c独立于if循环。

答案 2 :(得分:0)

第一个函数表现出未定义的行为,因为您在所有执行分支中都没有return个语句。

该功能需要:

int recurse(int c){
   if(c<10){
      return recurse(c+1); // Add return
   }else{
      return(c);
   } 
}

无论c块中发生什么,第二个函数都会返回if

int recurse(int c){
   if(c<10){
      return recurse(c+1);  // Add return
   }
   return(c);
}