扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
//循环实现
创新互联是一家专注网站建设、网络营销策划、微信小程序开发、电子商务建设、网络推广、移动互联开发、研究、服务为一体的技术型公司。公司成立十多年以来,已经为近1000家成都白乌鱼各业的企业公司提供互联网服务。现在,服务的近1000家客户与我们一路同行,见证我们的成长;未来,我们一起分享成功的喜悦。
#includestdio.h
int main()
{
int n, t = 0;
scanf("%d", n);
if(n=0)return 0;
else
while(n){
t = t * 10 + n % 10;
n /= 10;
}
printf("%d", t);
return 0;
}
简单修改一下就可以变递归了。代码如下
#includestdio.h
int fanzhuan(int n,int t){
t = t * 10 + n % 10;
n /= 10;
if(n0)return fanzhuan(n,t);
return t;
}
int main()
{
int n, t = 0;
scanf("%d", n);
if(n=0)return 0;
else t=fanzhuan(n,t);
printf("%d", t);
return 0;
}
提供思路,如果使用递归,主要针对阶乘,因此,在主函数里提供十个数相加,用循环,然后重新定一个函数,在函数里提供递归的算法,即不断调用直至结束得到结果,然后相加就行。
如果不是使用递归,可使用上一次的结果乘以新增的数字,然后依次相加即可。
标个记号准备上传对大神的源码分析。好了,我分析了上楼大神的代码实现,具体参考他的代码,分享下。注:可以看看《算法精解》Kyle Loudon著 或者《数据结构》 主编 安训国 他们说的堆栈原理。
#include stdio.h
char* dg(char* instr, char* outstr, char* outstr2)
{
if (*instr == 0)
{
*outstr = 0;
return outstr2;
}
*(outstr + 1) = *instr;
outstr = dg(instr + 1, outstr + 2, outstr2);
/* 下两句一直不执行,直到outstr = dg(instr + 5, outstr + 10, outstr2)返回后才执行,其后不断执行后三句!*/
*outstr = *instr - 32;
return outstr + 2;
}
int main()
{
char buf[50];
dg("aybdx", buf, buf);
puts(buf);
return 0;
}
int findf( int n ){
int a,b,c;
b = n % 2;
c = 0;
if ( n4){
if (b==c){
a=findf( n-1 ) + findf( n-3 );
}
else{
a=findf( n-2 ) + findf( n-4 );
}
return a;
}
else if ( n 0){
return -1;
}
else{
return 1;
}
}
//方法一,不需将转换后的字符存储在字符数组中
#includestdio.h
void change(int );
int main()
{
int n;
scanf("%d",n);
change(n);
printf("\n");
return 0;
}
void change(int num)
{
if(num==0)return ;
change(num/10);
printf("%d",num%10);
}
//方法二,先将转换后的字符存储在字符数组中
#includestdio.h
#define LEN 100
int m=0;
void change(int ,char *);
int main()
{
int n,i;
char a[LEN];
for(i=0;iLEN;i++)
a[i]='\0';
scanf("%d",n);
change(n,a);
printf("%s",a);
printf("\n");
return 0;
}
void change(int num,char *s)
{
if(num==0)return ;
change(num/10,s);
s[m++]=(char)(num%10+'0');
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流