我正在开发一个可以将数字转换为二进制形式的程序。
在帮助下,我能够得到这个,它似乎有效,但我只是不明白如何。我想最好的方法是尝试解释我认为这是如何工作的,有人可以纠正我。
我有一个函数,它有一个 if 语句,表示如果 n 除以 2 不等于 0,则将 n 除以 2。如果 n/2 为 1 或 0,则打印余数。
main 函数只是运行我给它的任何数字的函数,在本例中是 456。
但是程序怎么知道多次运行该函数以获得整个二进制形式呢?
我觉得这并没有那么复杂,但我不明白。
#include <stdio.h>
void ConvertToBinary(int n)
{
if (n / 2 != 0) {
ConvertToBinary(n / 2);
}
printf("%d", n % 2);
}
int main (){
ConvertToBinary (456);
return 0;
}
最佳答案
ConvertToBinary
函数是递归的,这意味着它会调用自身。在某些时候,该函数需要知道何时停止调用自身。这称为基本情况。
第一次调用此函数时,n=456。在这种情况下,n/2 != 0
为真,因此该函数调用自身,这次使用 228。它一直调用自身,直到传递给 n/2 != 0 的值
为假,这是基本情况。对该函数的最内层调用然后打印 n % 2
并返回。下一个最里面的调用也打印 n % 2
作为其 n
的值,依此类推调用堆栈。
所以函数调用看起来像这样:
ConvertToBinary(456)
ConvertToBinary(456/2=228)
ConvertToBinary(228/2=114)
ConvertToBinary(114/2=57)
ConvertToBinary(57/2=28)
ConvertToBinary(28/2=14)
ConvertToBinary(14/2=7)
ConvertToBinary(7/2=3)
ConvertToBinary(3/2=1)
print 1%2=1
print 3%2=1
print 7%2=1
print 14%2=0
print 28%2=0
print 57%2=1
print 114%2=0
print 228%2=0
print 456%2=0
结果:
111001000
关于c - 了解递归十进制到二进制代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33204772/