【发布时间】:2016-06-10 04:26:50
【问题描述】:
作为练习的一部分,我必须重写一个递归函数,以便新函数不是递归的。这两个函数都需要将正十进制整数输入转换为等效的二进制。
这是使用递归的代码:
void convert(int n) { //recursive
if (n > 0) {
convert(n/2);
printf("%d", n%2);
}
return;
}
这是我的代码:
void convert(int n) { //non-recursive
while (n > 0) {
printf("%d", n%2);
n/=2;
}
return;
}
我的代码的问题是,可以理解的是,我的二进制转换被向后打印出来。比如我输入数字8,我的函数返回0001,如果我输入2,返回01,等等
对于仅使用 stdio.h 库的快速修复有何建议?
【问题讨论】:
-
第一个代码段没有使用递归……
foo3应该是convert吗? -
不错的收获。我修好了。
-
输出到数组然后打印数组。
-
了解对于整数值(无符号)
n/2与n >> 1相同,但除法的计算成本更高,模计算也是如此。