为什么在这两段代码中,当将 inv 作为 globle var 时,函数可以正常工作(返回数字的倒数),但是当使其本地时返回 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);
}
如果您使用局部变量,则问题出在以下代码中:
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;
}