编写函数int sum_max(int sum),以及long exp(int a,int b)求满足以下条件的最大的n值 2^1+2^2+…+2^n<sum

可以看一下这个代码哪里错了吗,运行一直没结果

#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循环比较好。