小猴吃桃问题(递归算法)

问题遇到的现象和发生背景 第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢?输入数据有多组,每组占一行,包含一个正整数n(1
问题相关代码,请勿粘贴截图
#include
int f(int x)
{
    if(x==0)return 0;
    else{return f(x-1)*2+1;
    }
}
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF&&n>1&&n<30){
        printf("%d\n",f(n));
    }
    return 0;
}

运行结果及报错内容 输入2,输出7
我的解答思路和尝试过的方法 苦思冥想半天不知道这个递归方法该怎么写,我自己的思路是先假设一个数列,设a(n)为第n天剩下的桃子数量,a(n)=1,有a(n)=2*a(n-1)+1
我想要达到的结果 求指导一下写递归的思路与函数格式,感谢!

#include<stdio.h>
// 递归函数 
int fun(int day){
    if(day == 1)    //如果倒数倒最后一天
        return 1;    //则返回 1 ,代表最后一天的数据 
    else{
        return (fun(day-1)+1)*2;    //否则,计算前一天桃子数 
    }
}
int main(){
    int date = 0;    //总天数 
    int num= 0;        //总桃子数 
    printf("只剩一个桃子是第几天呢?:"); 
    scanf("%d",&date); 
    num = fun(date);    //递归桃子数 
    printf("第一天有%d个桃子",num);
    return 0;
}

递归函数,其实很好理解的。就是在一个回调函数里面,再设置一个一个回调函数。