减少函数中的参数是否合法?

时间:2017-04-24 12:51:33

标签: recursion arguments

减少函数中的参数是否合法?

int Test(int num){
  if(num == 0)
  {
    return 0;
  }
  else
  {
    printf("%d,", num);
    Test (num--);  //-- Is this statement is legal ?
  }
}

2 个答案:

答案 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不会更改。