永发信息网

c语言简单递归算法。但是一直报错。把一个数全部用2次幂的形式表示。

答案:2  悬赏:60  手机版
解决时间 2021-03-02 21:48
#include

void try(int n,int r){
if(n==1){
printf("2(%d)",r);
}
else {
try(n/2,r+1);
if(n%2==1)
printf("+2(%d)",r);
}
}
void main(){
int n;
scanf("%d",&n);
if(n>=1){
try(n,0);
}
else printf("error");
}
最佳答案
1.你的逻辑是正确的,但是try这个函数在c/c++的lib库中已经存在,所以会一直报错,你需要将try这个函数定义成其他的名称才行;
2.如果你使用gcc编译的话,建议你将main写成int的;
全部回答
#include  #include  #include  #include  //创建矩阵,矩阵用一维数组存储 double *matcreate(unsigned int m, unsigned int n) {     double *p = (double *)malloc(sizeof(double) * m * n);     if (p == null) printf("创建矩阵失败!\n");     return p; } //输入矩阵元素 void matinput(double *a, unsigned int m, unsigned int n) {     for (int i = 0; i < m; ++i)     {         for (int j = 0; j < n; ++j)         {             scanf("%f ", &a[i * n + j]);         }     }     return; } //随机产生矩阵元素,均匀分布于[from to] void matinitrand(double *a, unsigned int m, unsigned int n, double from, double to) {     if (a == null || m <= 0 || n <= 0) return;     double x;     srand(time(null));     for (int i = 0; i < m; ++i)     {         for (int j = 0; j < n; ++j)         {             x = (1.0 * rand() / rand_max) * (to - from) + from;             a[i * n + j] = x;         }     }     return; } //转置 void mattranspose(double *a, double *b, unsigned int m, unsigned int n) {     for (int i = 0; i < m; ++i)     {         for (int j = 0; j < n; ++j)         {             b[j*n +i]=a[i * n + j] ;         }     } } //输出矩阵 void matprint(double *a, unsigned int m, unsigned int n) {     for (int i = 0; i < m; ++i)     {         for (int j = 0; j < n; ++j)         {             printf("%8.4f ", a[i * n + j]);         }         putchar('\n');     }     return; } //矩阵乘法c=a*b void matmul(double *a,  double *b, double *c, unsigned int m, unsigned  int n, unsigned int k) {     if (a == null || b == null || c == null || m <= 0 || n <= 0 || k <= 0)    return;     double x = 0.0f;     for (int i = 0; i < m; ++i)     {         for (int u = 0; u < k; ++u)         {             x = 0.0f;             for (int j = 0; j < n; ++j)             {                 x += a[i * n + j] * b[j * k + u];             }             c[i * k + u] = x;         }     }     return; } //b=a^n, a:m*m阶矩阵 void matfac(double *a, double *b, unsigned int n, unsigned int m) {     double *c = (double *)malloc(sizeof(double) * m * m); //保存临时结果     if (n > 1)     {         matfac(a, c, n - 1, m);         matmul(a, c, b, m, m, m);     }     else         memcpy(b, a, sizeof(double)*m * m);     // printf("%d:\n",n);     // matprint(b, m,m);     free(c);                                    //回收内存     return ; } #define m 3 #define n 4 #define k n int main(int argc, char const *argv[]) {     double *a, *b, *b1,*bt, *c;     a = matcreate(m, n);     b = matcreate(n, k);     b1 = matcreate(n, k);     bt = matcreate(k,n);     c = matcreate(m, k);     if (!a || !b || !b1 || !bt || !c) return -1;     matinitrand(a, m, n, 0.0f, 1.0f);     printf("a=\n");     matprint(a, m, n);     matinitrand(b, n, k, 0.0f, 1.0f);     printf("b=\n");     matprint(b, n, k);     mattranspose(b,bt,n,k);     printf("b'=\n");     matprint(bt, k,n);     matmul(a, b, c, m, n, k);     printf("c=a*b\n");     matprint(c, m, n);     matfac(b, b1, 4, n);     printf("b^4\n");     matprint(b1, n, k);     return 0; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
华东理工大学MBA分数线高吗?好不好考?
意识流和蒙太奇有什么区别
口也不渴嘴皮干是怎么回事
蒸汽有毒?平时煮饭的时候不是会发出蒸汽吗?我
30牛顿是多少公斤力量
一个人好孤单写句话
甲日语怎么说
从大连到拉萨需要多久的时间?怎么走最快?
安全阀、溢流阀、节流阀、单向阀、换向阀的作
我手机欠费200多,我朋友说可以帮我报销到我
泥娃娃陶艺工坊这个地址在什么地方,我要处理
【挑担的拼音】我给画线的字选择正确的读音。
天天快递如何收费
iphone7plus景深拍照模式怎么用?
【山西运城2013年膜袋红富士苹果走势如何膜袋
推荐资讯
“这种悲惨的境况,在商业史上是无与伦比的。
1、在利润表中,对主营业务要求详细列示其收
5月24日是什么节日?
上古卷轴5AFT随从管理,有书但是跟随从对话里
老虎的特长和喜欢吃什么
县太师爷和县太爷之间的关系是?哪个官大?
电动车的48v电瓶修复要多少钱?如题 谢谢了
郑州到上海虹桥高铁到昆山南停车吗
朱家山这个地址在什么地方,我要处理点事
梦幻国度里声望怎么获得?
【消防站】消防站分为哪几类()。
欧米茄123.20.38.21.08.001和GuessW11130L1哪
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?