最近在自学c,环境是vs2019,联系的时候发现了一个问题
两个题目,相同结构代码下,递归和循环的打印顺序一个相同,一个相反。
帮忙解惑一下,感谢~
十进制转二进制代码
#include<stdio.h>
//-------------------------二进制的转换-------------------------
// >>>递归转二进制<<<
int bit2(unsigned int num)
{
if (!num)
{
return num;
}
bit2(num / 2);
printf("%d", num % 2);
}
// >>>循环转二进制<<<
int rbit2(unsigned int num)
{
int i_count = 0;
char c_output01[10] = { 0 };
for (; i_count < 10 && num != 0; i_count++)
{
c_output01[i_count] = num % 2;
num /= 2;
}
i_count--;
for (; i_count >= 0; i_count--)
{
printf("%d", c_output01[i_count]);
}
return num;
}
int main()
{
unsigned int i_num1 = 0;
printf("-------------------------二进制的转化-------------------------\n");
printf("请输入一个小于1024的数字:\n");
scanf_s("%d",&i_num1);
printf("\n嵌套转二进制:\t");
bit2(i_num1);
printf("\n递归转二进制:\t");
rbit2(i_num1);
return 0;
}
十进制获取数位上数值的代码
#include<stdio.h>
//-------------------------获取数位数字-------------------------
// >>>递归获取数位<<<
int getDigit(int num)
{
if (!num)
{
return num;
}
printf("%d\t", num % 10);
getDigit(num / 10);
}
// >>>循环获取数位<<<
int rgetDigit(int num)
{
int i_count = 0;
char c_output[10] = { 0 };
for (; i_count < 10 && num != 0; i_count++)
{
c_output[i_count] = num % 10;
num /= 10;
}
i_count--;
for (; i_count >= 0; i_count--)
{
printf("%d\t", c_output[i_count]);
}
return num;
}
int main()
{
int i_num = 0;
printf("-------------------------获取数位数字-------------------------\n");
printf("请输入一个数字:\t\n");
scanf_s("%d", &i_num);
printf("\n递归获取数位\t");
getDigit(i_num);
printf("\n循环获取数位\t");
rgetDigit(i_num);
return 0;
}
辛苦了!