C 理解从十进制到二进制的递归代码?
我正在开发一个程序,可以将数字转换成二进制形式 在帮助下,我能够得到这个,它似乎起作用,但我只是不明白如何。我想最好的办法是解释一下我认为这是如何起作用的,有人可以纠正我C 理解从十进制到二进制的递归代码?,c,recursion,binary,decimal,C,Recursion,Binary,Decimal,我正在开发一个程序,可以将数字转换成二进制形式 在帮助下,我能够得到这个,它似乎起作用,但我只是不明白如何。我想最好的办法是解释一下我认为这是如何起作用的,有人可以纠正我 我有一个函数,它有一个if语句,如果n除以2不等于0,那么就把n除以2。然后,如果n/2,则打印余数,因此为1或0 主函数只是使用我给它的任何数字来运行函数,在本例中是456 但是程序如何知道多次运行函数以获得整个二进制形式呢 我觉得这没那么复杂,但我不明白 #include <stdio.h> void Con
我有一个函数,它有一个if语句,如果n除以2不等于0,那么就把n除以2。然后,如果n/2,则打印余数,因此为1或0 主函数只是使用我给它的任何数字来运行函数,在本例中是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;
}
#包括
void ConvertToBinary(int n)
{
如果(n/2!=0){
ConvertToBinary(n/2);
}
printf(“%d”,n%2);
}
int main(){
ConvertToBinary(456);
返回0;
}
在一张衬纸上一行一行地浏览它。在进行递归调用时使用缩进,然后在返回时取消缩进。将输出放在论文的右栏
我会从简单的数字开始,比如1、4、7、10,然后试试456。在一张有内衬的纸上一行一行地浏览。在进行递归调用时使用缩进,然后在返回时取消缩进。将输出放在论文的右栏
#include <stdio.h>
void ConvertToBinary(int n)
{
// is the number passed in 2 or greater? If so, print out the smaller binary digits first.
if (n / 2 != 0) {
// this is a recursive call. It won't return until all the smaller binary digits have been printed.
ConvertToBinary(n / 2);
}
// all the smaller digits have been printed, time to print out the current binary digit.
printf("%d", n % 2);
}
int main (){
ConvertToBinary (456);
return 0;
}
我会从简单的数字开始,比如1、4、7、10,然后试试456
#include <stdio.h>
void ConvertToBinary(int n)
{
// is the number passed in 2 or greater? If so, print out the smaller binary digits first.
if (n / 2 != 0) {
// this is a recursive call. It won't return until all the smaller binary digits have been printed.
ConvertToBinary(n / 2);
}
// all the smaller digits have been printed, time to print out the current binary digit.
printf("%d", n % 2);
}
int main (){
ConvertToBinary (456);
return 0;
}
void ConvertToBinary(int n)
{
//输入的数字是否为2或更大?如果是,请先打印较小的二进制数字。
如果(n/2!=0){
//这是一个递归调用。在打印所有较小的二进制数字之前,它不会返回。
ConvertToBinary(n/2);
}
//所有较小的数字都已打印出来,是时候打印出当前的二进制数字了。
printf(“%d”,n%2);
}
int main(){
ConvertToBinary(456);
返回0;
}
#包括
void ConvertToBinary(int n)
{
//输入的数字是否为2或更大?如果是,请先打印较小的二进制数字。
如果(n/2!=0){
//这是一个递归调用。在打印所有较小的二进制数字之前,它不会返回。
ConvertToBinary(n/2);
}
//所有较小的数字都已打印出来,是时候打印出当前的二进制数字了。
printf(“%d”,n%2);
}
int main(){
ConvertToBinary(456);
返回0;
}
函数ConvertToBinary
是递归的,这意味着它调用自己。在某些时候,函数需要知道何时停止调用自己。这称为基本情况
第一次调用此函数时,n=456。在这种情况下,n/2!=0
为true,因此函数调用自身,这次使用228。它不断地调用自己,直到传递一个值,其中n/2!=0
为false,这是基本情况。然后,对函数的最内部调用打印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
函数
ConvertToBinary
是递归的,这意味着它调用自己。在某些时候,函数需要知道何时停止调用自己。这称为基本情况
第一次调用此函数时,n=456。在这种情况下,n/2!=0
为true,因此函数调用自身,这次使用228。它不断地调用自己,直到传递一个值,其中n/2!=0
为false,这是基本情况。然后,对函数的最内部调用打印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
这是我在这里的第一个答案,但我会尽力解释。这是递归的一个例子,它是解决某些类型问题的强大工具。诀窍在于该方法调用自身,因此跟踪它(使用较小的示例): 第一次呼叫 n=13 使用13/2=6调用ConvertToBinary 第二次呼叫 n=6; 使用6/2=3调用ConvertToBinary 第三次呼叫 n=3 使用3/2=1调用ConvertToBinary 第四次呼叫 n=1 1/2=0,继续! 打印1%2=1 方法退出并返回到第三个调用 第三次再打 打印3%2=1 方法退出并返回到第二个调用 第二次电话 打印6%2=0 方法退出并返回到第一个调用 第一次再打 打印13%2=1 完成了
现在我们有1101,它是二进制的13,这是我在这里的第一个答案,但我会尽力解释。这是递归的一个例子,它是解决某些类型问题的强大工具。诀窍在于该方法调用自身,因此跟踪它(使用较小的示例): 第一次呼叫 n=13 使用13/2=6调用ConvertToBinary 第二次呼叫 n=6; 使用6/2=3调用ConvertToBinary 第三次呼叫 n=3 使用3/2=1调用ConvertToBinary 第四次呼叫 n=1 1/2=0,继续! 打印1%2=1 方法退出并返回到第三个调用 第三次再打 打印3%2=1 方法退出并返回到第二个调用 第二次电话 打印6%2=0 方法退出并返回到第一个调用 第一次再打 打印13%2=1 完成了
现在我们有1101,它是13的二进制形式,我投票结束这个问题,因为堆栈溢出不是代码复查或教程站点。“然后如果n/2,它将打印剩余的,所以是1或0”或者
-1
如果n_original<0
。我投票将此问题作为主题外的问题结束,因为堆栈溢出不是代码复查或教程站点。“如果n/2,则打印剩余部分,因此为1或0”或-