我在递归中遇到了奇怪的事情,请按照下面的代码按降序打印数字。但是它很快完成递归并执行下一个printf语句,它会在程序中自动递增而不会增加语句。
int main()
{
int count=10;
counter(count);
}
int counter(int count)
{
if(count>0)
{
printf("%d\n",count);
counter(count-1);
printf("%d",count) //THIS STATMENT MAKES THE VALUE INCREMENT
//AFTER THE RECURSION
}
}
输出:
10
9
8
7
6
5
4
3
2
1
1 //2nd printf results in increment without any increment operator
2
3
4
5
6
7
8
9
10
答案 0 :(得分:2)
致电时
counter(count-1);
使用值counter-1
调用函数的新调用,但函数当前调用中counter
的值不会更改。因此,当函数返回时,下一次调用printf
会打印counter
的值。
如果您在count
为2时可视化通话,则会获得
printf("%d\n",2);
counter(1);
printf("%d\n",2); // I am assuming you have \n there.
如果您将通话扩展为counter(1)
,则会获得:
printf("%d\n",2);
printf("%d\n",1);
counter(0);
printf("%d\n",1);
printf("%d\n",2);
counter(0)
不会打印任何内容。它没有做任何事情就返回。因此,该代码块相当于:
printf("%d\n",2);
printf("%d\n",1);
printf("%d\n",1);
printf("%d\n",2);
如果你从更高的数字开始,比如10,你得到:
printf("%d\n",10);
printf("%d\n",9);
...
printf("%d\n",2);
printf("%d\n",1);
printf("%d\n",1);
printf("%d\n",2);
...
printf("%d\n",9);
printf("%d\n",10);
这解释了输出。
答案 1 :(得分:0)
您的回答不准确,无法解释答案。 直接改值计数器后还是会增加
int main()
{
int count=10;
counter(count);
}
int counter(int count)
{
if(count>0)
{
count = count-1
printf("%d\n",count);
counter(count);
printf("%d",count) //THIS STATMENT MAKES THE VALUE INCREMENT
//AFTER THE RECURSION
}
}
上面的代码仍然会产生一些相同的输出,只需稍作改动