2013-04-05 135 views
1

我想了解递归。我不明白为什么下面这段代码在无限循环中运行?为什么这个函数在无限循环中运行?

void myFunc(int n) 
{ 
    if(n==0) 
     return; 
    else 
    { 
     printf("%d\n",n); 
     myFunc(n--); //if I put n=n-1 before this line then it is running fine and will exit from the function . 
     printf("%d\n",n); 
    } 

} 

int main() 
{ 

    myFunc(4); 
} 

回答

7

--是一个递减运算符,如您正在使用它,只有生效myFunc被调用的n值后,所以你会用相同的值一遍一遍地呼唤myFunc

使用它作为预递减运营商将解决您的特定使用案例:myFunc(--n)将不得不把n=n-1上线之前,类似的效果。

3

因为调用之后进行递减。之前没有。

如果你这样做myFunc(--n);相反,它会工作

4

N--调用后缀操作,这意味着n的值被传递到myFunc的。之后,n的值减1。 调用myFunc( - n)。

3

n--递减n传递给myFunc()n后,所以myFunc正在接收每次调用时间相同n值。

0

N--是postfix运营商。这意味着它将在使用该值之后递增您正在使用的变量。例如,在表达式x * y--中,编译器将返回x * y,然后递减y。

1

n - 和 - n是不同的。 您应该查看C操作员和序列点的解释。 基本上,N--手段“使用n和在下一序列点递减它”, 而--n手段“递减n个第一,然后用它” ..

相关问题