有人能解释一下这个程序是如何工作的吗?它通过递归函数显示数字的二进制等价物 #包括 #包括 整数二进制(int); void main() { int-num; printf(“输入编号:\n”); scanf_s(“%d”和&num); 二进制(num); } 整数二进制(整数) { 内部rem; rem=num%2; num=num/2; 如果(num==0) { printf(“\n二进制等价物为%d”,rem); 返回rem; } 其他的 二进制(num); printf(“%d”,rem); }
我无法理解这里返回语句的工作原理。它将值返回给什么?我想知道最终的结果是怎样的。假设我们把'8'作为输入,它输出1000,这是'8'的二进制等价物。但是我无法工作。我试图一步一步地解释有人能解释一下这个程序是如何工作的吗?它通过递归函数显示数字的二进制等价物 #包括 #包括 整数二进制(int); void main() { int-num; printf(“输入编号:\n”); scanf_s(“%d”和&num); 二进制(num); } 整数二进制(整数) { 内部rem; rem=num%2; num=num/2; 如果(num==0) { printf(“\n二进制等价物为%d”,rem); 返回rem; } 其他的 二进制(num); printf(“%d”,rem); },c,C,我无法理解这里返回语句的工作原理。它将值返回给什么?我想知道最终的结果是怎样的。假设我们把'8'作为输入,它输出1000,这是'8'的二进制等价物。但是我无法工作。我试图一步一步地解释 #include <stdio.h> #include <math.h> int binary(int); void main() { int num; printf("Enter the number:\n"); scanf_s("%d", &
#include <stdio.h>
#include <math.h>
int binary(int);
void main()
{
int num;
printf("Enter the number:\n");
scanf_s("%d", &num);
binary(num);
}
int binary(int num)
{
int rem;
rem = num % 2;
num = num / 2;
if(num == 0)
{
printf("\nThe binary equivalent is %d", rem);
return rem;
}
else
binary(num);
printf("%d", rem);
}
此代码从用户处获取十进制数。然后调用一个函数binary(num)代码>
在二进制(num)
函数中:
int num;
printf("Enter the number:\n");
scanf("%d",&num);
首先,您必须知道如何将数字从十进制
转换为二进制
。在这个递归
函数中,工作已经完成
int binary(int num)
{
int rem;
rem=num%2;
num=num/2;
if(num==0)
{
printf("\nThe binary equivalent is %d",rem);
return rem;
}
else
binary(num);
printf("%d",rem);
}
表示如果num为零,则它将终止并返回二进制值,即rem
。我们正在rem
中存储二进制值
否则它将继续并再次调用函数binary()
,以计算数字的其余部分。我假设您不太熟悉递归的工作原理,所以我将在这里写出来。:)
输入的示例=8。我们运行函数binary(8)
从二进制(8)开始:rem=8%2=0
,num=8/2=4
。由于num
不是0
,请运行binary(4)
。请注意,binary(4)
完成后,我们需要打印rem
,即0
。但是现在,我们需要首先运行二进制(4)
运行二进制(4):rem=4%2=0
,num=4/2=2
。由于num
不是0
,请运行binary(2)
。同样,我们将在函数binary(2)
完成后打印rem
,即0
。但是现在,我们需要首先运行二进制(2)
运行二进制(2):rem=2%2=0
,num=2/2=1
。由于num
仍然不是0
,请运行binary(1)
。同样,我们将在函数binary(1)
完成后打印rem
,即0
。但是现在,我们需要首先运行二进制(1)
运行二进制(1):rem=1%2=1
,num=1/2=0
(整数除法)。由于num
最终是0
(这就是我们称之为递归的基本情况),我们打印“\n二进制等价物是1
--我们开始返回到前面的函数--
既然binary(1)
完成了,我们将返回到binary(2)
来完成剩余的语句(参见上文)。因此,我们打印0
。然后binary(2)
完成
既然binary(2)
完成了,我们返回到binary(4)
来完成剩下的语句(参见上文)。因此我们再次打印0
。然后binary(4)
完成
既然binary(4)
完成了,我们返回到binary(8)
来完成剩余的语句(参见上文)。因此我们打印0
。然后最后binary(8)
完成
最后,输出为:\n二进制等价物为1000
哦,是的,顺便说一句,你的二进制
函数可以是void
函数。因为它不返回任何有用的值。在调试器中逐步完成代码,或者用铅笔和纸计算出数字。这将对你有很大帮助。在这段代码中,没有人使用返回值。它返回数字,但不使用返回值-代码是s直到UB,因为在函数末尾缺少一个return语句
if(num==0)