减少函数中的参数是否合法?
int Test(int num){
if(num == 0)
{
return 0;
}
else
{
printf("%d,", num);
Test (num--); //-- Is this statement is legal ?
}
}
答案 0 :(得分:0)
这是recursive function的有效示例。请注意,对Test
的每次调用都会拥有“自己的”num
,但它们不会共享num
。这就是为什么这实际上是相同的:
int Test(int num){
if(num == 0) {
return 0;
}
else
{
printf("%d,", no);
Test (num - 1); // Simply subtract one here
}
}
当用数字<来调用它时,你最终会得到一个无限循环。 0:
Test(-1) // This loops forever
答案 1 :(得分:0)
(我假设这是java代码?)
这是完全合法的,但请注意,它不会影响函数外部的变量 - num
是按值复制到函数中,因此您只编辑副本。每次调用Test
时,它都会从调用它的位置获取当前值num
的新副本。例如,使用此代码:
int num = 2;
printf("Num before Test : %d,", num);
int res = Test(num);
printf("Result : %d,", res);
printf("Num after Test : %d,", num);
int Test(int num){
if(num == 0)
{
return 0;
}
else
{
printf("In Test : %d,", num);
Test (num--);
}
}
输出结果为:
Num before Test : 2
In Test : 2
In Test : 1
Result : 0
Num after Test : 2
请注意,虽然res
可能是您想要的结果,但num
不会更改。