gpt4 book ai didi

c - C 和 printf 中的递归函数

转载 作者:太空宇宙 更新时间:2023-11-04 04:17:54 25 4
gpt4 key购买 nike

所以,首先我完全是 C 语言的初学者,我们正在大学学习“结构化编程”类(class)。

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

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

#include <stdio.h>

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;
}

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

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

最佳答案

反转是使用函数的调用堆栈完成的。我的意思是调用函数的方式保证 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
}

关于c - C 和 printf 中的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49769161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com