C语言递归求猴子吃桃问题

题目描述
一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;接下来的每一天它都会吃剩余的桃子的一半外加一个。第 nn 天早上起来一看,只剩下 11 个桃子了。请问小猴买了几个桃子?

输入格式
输入一个正整数 nn,表示天数。

输出格式
输出小猴买了多少个桃子。

#include
int f(int x,int y)
{
    x--;
   y=((y+1)*2);
   if(x==0) return y;
   else return f(x-1,y);
}
int main()
{
    int n,m;
    m=1;
    scanf("%d",&n);
    printf("%d",f(n,m));
}


为什么没有输出

改动处见注释,供参考:

#include<stdio.h>
int f(int x, int y)
{
    //x--;       //修改
    if (x == 1)  //if (x==0)
        return y;
    else {
        y = ((y + 1) * 2); //修改
        f(x - 1, y);       //修改 return f(x-1,y);
    }
}
int main()
{
    int n, m;
    m = 1;
    scanf("%d", &n);
    printf("%d", f(n, m));
}


#include <stdio.h>
 
int peach(int day){
    int result;
    if (day == 1)
        result = 11;
    else
        result =(peach(day + 1) + 1) * 2;
    return result;
}
 
int main(void){
    int n,num;
    scanf("%d",&n);
    num = peach(n);
    printf("num=%d\n", num);
    return 0;
}

该回答引用ChatGPT

using System;

class Program {
    static void Main(string[] args) {
        int n = int.Parse(Console.ReadLine());
        int x = 1;
        for (int i = 1; i < n; i++) {
            x = (x + 1) * 2;
        }
        Console.WriteLine(x);
    }
}


输入天数n,使用for循环计算每天剩余桃子数量,最后得到小猴开始买了多少个桃子x,输出即可。注意:题目描述中未指定n的范围,可能需要加上异常处理。

函数f刚进去的时候x已经减一了,后面else条件里面再调用f的时候直接return f(x,y)就可以了