因为静态局部变量是在编译时赋初值的,且只赋初值一次,在程序运行时它已有初值。以后在每次调用函数时就不再重新赋初值,而是保留上次函数调用结束时的值。所以只有当b是零的时候,说明从来没有过n>0的情况,输出0;如果不定义static,可以发现,b在每次调用函数都会赋值为0,这样对于一个正数n,在递归的最后也是会输出0的。
定义为静态的原因是在下次调用的时候,b得值依旧是0,b=0也就作为了我们跳出递归的条件,因为if语句后b被赋值为1,你可能奇怪,为什么静态变量为什么还能被第二次赋值这是静态变量与常量的区别,他被放在一个确定的位置,每次被调用,每次都会被赋值为0,这也就保证了递归的跳出
因为你这是个递归函数,还是从后到前输出二进制位的(从低到高),static变量,只初始化一次,是为了区分他是最初输入的变量(n)是0,还是递归了几次后变0的。如果一进来就是0,就输出一个0就会了,一次都不执行if里面的代码,如果一开始不是0,至少会执行1此if里面的,static b 就会变为1,进入到下一层递归,去输出高位,知道n成0终止递归时,已经到高位了,就是前置0,不应该输出。
还有就是递归退出来的时候,不要在输出0了,两个if只执行其中一个