01
前言
这个公众号(搜索:jay-ztx)以后作为主体更新,这也是真正属于我自己的一个公总号,周同学的学习小屋是让同学帮我注册的,毕竟那时候还未成年,无法创建以自己为主体的公总号平台,希望大家能继续关注我,寒假期间会给大家分享很多好玩的代码,可以用来写一些简单的小游戏,下面进入正题(暂时先把实训试题更新完,寒假可能更新一个C语言小系统)
02
题目
现在来看看题目
2-4. 如果上题中的幂大于1,则幂也要用2的幂形式输出。(10分)
如:87 = 2(6)+2(4)+2(2)+2(1)+2(0)
= 2(2(2)+2(1))+2(2(2))+2(2(1))+2(1)+2(0)
= 2(2(2(1))+2(1))+2(2(2(1)))+2(2(1))+2(1)+2(0)
样例输入:87
样例输入:2(2(2(1))+2(1))+2(2(2(1)))+2(2(1))+2(1)+2(0)
(根据中学生信息竞赛题改编)
03
思路
这题很明显要使用递归调用,否则根本不知道要几次循环转换才能将次幂也转换成2次幂的形式,我们需要思考的问题有两点
这两个问题如果没有思考清楚,写完之后绝对会进入无限递归调用。
首先思考
第一个问题:什么时候进入递归调用呢?
第一次递归调用的时候肯定是在输入数据之后。
在往后的递归过程中每次都是判断次幂是否大于1,大于1就把这个值再次传入函数之中,直到,次幂 等于1或者0
第二个问题:什么时候结束递归调用
每次我们传入一个数据之后,首先计算出这个数以下最大的一个二次幂表示数,例如:5以下最大是4,表示为2(2),用传入的数据,减去这个最大的值,如果为0,则输出2(n)并立刻return。结束这次递归调用
那么现在来看看我写的程序吧
04
后话
前面已经说过了,以后用这个公众号(jay-ztx)来发布各种文章
不仅仅是C语言,还有c++,java的学习。
感谢各位小伙伴的支持~
往期作品: