Just_浮光
2020-03-23 14:44
采纳率: 100%
浏览 171

初学者的提问_这个递归函数(十进制转化为二进制)运行的结果为什么会在预期的结果前加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

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 胖狗子修行之路 2020-03-23 16:09
    已采纳

    递归结束的条件是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;
    }
    
    打赏 评论
  • 九头蛇daze 2020-03-23 14:47

    代码都贴不全吗,再编辑一下吧

    打赏 评论

相关推荐 更多相似问题