初学者的提问_这个递归函数(十进制转化为二进制)运行的结果为什么会在预期的结果前加0,恳请各位大佬解惑。
问题描述:
#include<iostream>
using namespace std;
void f(int i)
{
if(i>0){
if(i>0) f(i/2);
cout<<i%2;
}
else if(i<0){
if(-i>0) f(i/2);
cout<<(-i)%2;
}
else cout<<i;
}
int main( )
{
f(5); cout<<'\n';
f(-23); cout<<'\n';
f(0); cout<<'\n';
return 0;
}
我预期的结果101;10111;0
运行的结果0101;010111;0
答
递归结束的条件是i = 0, 也就是你最后的一个else条件
#include<iostream>
using namespace std;
void f1(int i) {
if(i == 0) return;
if(i>0) f1(i/2);
cout<<i%2;
}
void f(int i) {
if(i > 0) {
f1(i);
}else if(i < 0){
cout << "-";
f1(-i);
}else {
cout << i;
}
}
int main( )
{
f(5); cout<<'\n';
f(-23); cout<<'\n';
f(0); cout<<'\n';
return 0;
}
答
代码都贴不全吗,再编辑一下吧