C和printf中的递归函数

所以,首先我是C的初学者,我们正在大学学习“结构化编程”课程。

现在,关于“递归函数”的最后几个讲座对我来说是个初学者的痛苦。 你们中的任何人都可以这样解释我:

所以我有这个小脚本,一个递归函数,它接受十进制数并将其转换为二进制数:

#include  void binary(int num) { if (num == 0) return; binary(num / 2); printf("%d", num % 2); } int main() { int n; scanf("%d", &n); binary(n); return 0; } 

现在我想知道,这个function如何运作? 我知道它背后的逻辑,它应该做什么,但我不知道它是如何做到的。 底部的printf特别让我失望,例如,如果printf函数在递归调用之前,输入十进制数10打印出来(0101),但如果它在它下面打印出正确的二进制数(1010)?

非常感谢任何forms的帮助,亲切的问候。

使用函数的调用堆栈完成反转。 我的意思是调用函数的方式,这保证了MSB首先打印然后打印下一个,依此类推。

 void binary(int num) { if (num == 0) return; binary(num / 2); // Wait, I will print but you first print the MSB's. printf("%d", num % 2); // Now I print the last digit. } 

向下运动会移动呼叫。

 {binary(12) {binary(6) {binary(3) {binary(1) binary(0) -- returns Now we print 1 } print 1 } prints 0 } prints 0 } 

如果想要递归地打印带有前导零的char的位,他可以使用以下代码:

 #include  void print_bit_iter(char x, int n) { int bit = (x & (1 << n - 1)) != 0; printf("%d", bit); if(n != 0) print_bit_iter(x, n - 1); } int main() { print_bit_iter('U', 8); } 

这将有

 01010101 

作为输出。