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 ??
答案 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);
}