int reverse(int);
void main()
{
int no =5;
reverse(no);
}
int reverse(int no)
{
if(no == 0)
return 0;
else
printf("%d",no);
reverse(no--);
}
该程序进入无限循环。为什么会这样?我无法获得所需的输出。所需的输出应该是 5 4 3 2 1.提前谢谢你
在这个递归调用中:
reverse(no--);
您正在传递的值。no--
由于这使用后缀 -- 运算符,这意味着“递减no
,然后将原始值传递no
给递归调用reverse
。” 这会导致无限递归,因为您不断进行递归调用并将其reverse
设置为相同的值。
要解决此问题,请将其更改为阅读
reverse(no - 1);
请注意,这里没有理由减少no
,因为在当前的递归调用中,您将永远不会再阅读no
。您可以将值传递给no - 1
函数。事实上,您通常可能希望避免--
在递归调用中使用,因为它几乎总是表示代码中有错误。
希望这可以帮助!
您在no
. 首先获取的值no
并将其用作表达式的值,然后递减no
(仍然使用未递减的值作为表达式的值)。您可能想使用--no
甚至只是no - 1
. (前者会修改no
,而后者不会,但这没关系,因为no
在那之后没有被引用。)
改变:
reverse(no--);
至:
reverse(no-1);
no--
返回递减发生前的原始值。所以这条线会一直调用reverse(5)
。因此,无限循环。
n--
是后递增,它首先使用 n 作为函数的参数,然后递减 n。
所以n--
本质上是
reverse(n);
n = n - 1;
你想要的是--n
您正在使用后减量。首先评估,然后减少价值。
改变这个:
reverse(no--);
对此:
return reverse(--no);
--no是预减量。首先减少“否”,然后将值传递给反转。
请注意,我正在返回结果值,由于它的声明,您的函数总是必须返回一个 int。
你想做
int reverse(int);
int main()
{
int no =5;
reverse(no);
}
int reverse(int no)
{
if(no == 0)
return 0;
else
printf("%d",no);
return reverse(--no);
}
这样您每次调用 reverse 时都会返回一个数字,并且在使用它之前减少 no 。