秃头大法不秃头


私信TA

用户名:13035802615

访问量:830

签 名:

有志者事竟成

等  级
排  名 1818
经  验 2619
参赛次数 4
文章发表 1
年  龄 21
在职情况 学生
学  校
专  业 软件工程

  自我简介:

就喜欢和Bug死磕到底

解题思路:

定义一个原型为  void f(int n)  的函数进行进制转换,在该子函数中进行递归调用。编程之前我们先思考一下如何将一个十进制的数转换成八进制,我们可以用“除基取余法”,即将十进制数除以8获得一个商和余数(当整除时不要以为0不是余数,这时0就是余数),再把获得的商除以8再获得一个商和余数......一直重复以上步骤,直到商为零为止。我们可以看出有重复的步骤:将获得的商除以8获得新的商和余数。因此,我们能够用递归函数解决这个问题。同时,我们应该找到递归出口,通过编程之前对如何将十进制数转换成8进制数这个问题的思考,我们可以找到递归函数的出口就是当商为零时(n/8==0)。还有一个需要注意的问题就是,要把余数逆向输出,所以要将  printf("%d",n%8);  放在  f(n/8);  之后。希望读者能通过一道简单的题目深刻理解一个知识点。


注意事项:

读者如果对递归函数理解得不够好,理解该程序可能会有一些困难。如果我哪里讲解得不够好,甚至是错误,还请指出。

参考代码:

#include

void f(int n)                                //函数用来进制转换

{

     if(n/8==0)                           //递归出口,当商为0时(n/8==0)时停止递归调用

        printf("%d",n%8);

     else 

     {

        f(n/8);

        printf("%d",n%8);           //放在函数调用之后,可以逆向输出余数

     }

}

int main()

{

     int n;


     scanf("%d",&n);

     f(n);

     putchar('\n');

     return 0;

}

 

0.0分

2 人评分

  评论区

  • «
  • »