题目描述
一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;接下来的每一天它都会吃剩余的桃子的一半外加一个。第 n n n 天早上起来一看,只剩下 1 1 1 个桃子了。请问小猴买了几个桃子?
输入格式
输入一个正整数 n n n,表示天数。
输出格式
输出小猴买了多少个桃子。
样例输入
4
样例输出
22
提示
数据保证, 1 ≤ n ≤ 20 1\le n\le20 1≤n≤20。
思路分析
递推公式:f(m) = 2(f(m+1)+1)
递推边界:f(n) = 1, n的值通过输入获得。
参考代码-递归
#include<bits/stdc++.h>
using namespace std;
int n;
int f(int m)
{if(m==n) return 1;else return 2*(f(m+1)+1);
}
int main() {cin>>n;cout<<f(1);return 0;
}
参考代码-递推
#include<bits/stdc++.h>
using namespace std;
int main() {int n;cin >> n;int f = 1; //第n天的时候,只有1个//从第n-1天开始往前推while(--n) {//每天吃剩余桃子的一半,加1个。从后一天往前计算时,要先加上1个,再乘以2f = 2*(f+1);}cout << f;return 0;
}