可以看一下这个代码哪里错了吗,运行一直没结果
#include<stdio.h>
long exp(int a,int b)
{
int t;
t=a*exp(a,b);
return(t);
}
int sum_max(int sum)
{
int n=0,s=0;
do {
s+=exp(2,n);
n++;
} while(s<=sum);
return (n-1);
}
void main()
{
int k;
printf("input k=");
scanf("%d",&k);
printf("%d",sum_max(k));
}
修改处见注释,供参考:
#include<stdio.h>
long exp(int a,int b)
{
int t;
if(b == 0) //修改
return 1;
else //修改
t=a*exp(a,b-1);//修改
return(t);
}
int sum_max(int sum)
{
int n=0,s=0;
do {
n++; //修改
s+=exp(2,n);
} while(s < sum);//修改
return (n-1);
}
void main()
{
int k;
printf("input k=");
scanf("%d",&k);
printf("%d",sum_max(k));
}
略微多句嘴,递归函数容易导致栈溢出。如果n的范围不明确的话,还是用for循环比较好。