对任意数字求逆的递归问题

问题描述 投票:0回答:1

为什么在这段代码中,当将

inv
作为全局变量时,函数可以正常工作(返回数字的倒数),但是当将其设为本地变量时,则返回 4(如果 N = 1234)?

我认为在这种情况下,如果 N = 1234,它将返回 1。

 int inv = 0; // here it is global

 int inverse(int N){ 
    if(N == 0)
        return 0;

    int remainder = N % 10 ; 
    
    inv = inv*10 + remainder;

    inverse(N / 10);

    printf("%d ",inv);
    return inv;
}

int main() { 
    int N = 12345;
    int inv = inverse(N);
    printf("==> %d",inv);
}
c
1个回答
0
投票

如果您使用局部变量,则问题出在以下代码中:

    int inv = inv*10 + remainder;

    inverse(N / 10);

inv
的值在调用其下面的逆方法后不会改变,因为该值位于本地方法范围内,无法传递到另一个方法。

另一方面,全局变量可以工作,因为 inverse 的所有实例在 全局范围中共享相同的值。

我建议将全局变量更改为可以传递给递归调用的参数:

int inverse(int N, int inv) { 
  if(N == 0)
    return inv;

  int remainder = N % 10 ; 
  inv = inv * 10 + remainder;

  return inverse(N / 10, inv);
}

int main() { 
  int N = 12345;
  int inv = inverse(N, 0);
  printf("==> %d", inv);
  return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.