以下C语言程序代码所采用的数据存储结构和所代表的含义以及该程序的设计思路

#include
void fun(short i)
{
int j=0;
if(i==0)
{
printf("0"); //0位是1时,配合调用前的2()正好组成2(0),即1
return;
}
if (i==1)
{
printf("2(0)"); //1位是0,即2(2(0)),也就是2,只有2(),括号内的数拆分时有1才会用到
return;
}
if(i==2)
{
printf("2"); //2(2)
return;
}
for(;i!=0;j++)
{
if(i&1) //位运算
{
if(j==1) //2位为1直接打印2,不再递归
printf("2");
else
{
printf("2(");
fun(j);
printf(")");
}
i=i>>1;
if(i!=0)
printf("+");
continue;
}
i=i>>1;
}
}
int main(int argc, char* argv[])
{
short i;
scanf("%d",&i);
fun(i);
return 0;
}
真的是小白,一点也不懂

递归的方法将正整数用2的幂次方表示
比如说5 = 2(0)+2(2)
2的0次方(1)+2的2次方(4)
其实本质上就是把一个数字转换成二进制。
如果是1的位,对应就是2的n次方
比如5
就是101,因此就是1*2^0+0*2^1+1*2^2