问题:
有这样一个问题,去水果摊买桃子吃,吃完之后三个桃核可以再换一个桃子。
假如现在买了N个桃子,最多可以吃到几个桃子?
分析:
典型的递归解决问题。找出桃子数量、桃核数量和最终数量之间的关系,递归调用,便直接解决问题。
代码:
#include<iostream>
using namespace std;
int total = 0;
void com(int n,int m) //n代表桃子数,m代表桃核数
{
total += n; //桃子总数
if (n + m < 3) //不够换一个桃子
return;
com(n / 3 , n % 3); //递归
}
int main()
{
int n;
cin >> n;
if (n < 3) //开始桃子数量小于3,不够兑换桃子,输入数量即为总数
total = n;
else
com(n,0); //初始状态下桃核数量为0
cout << total << endl;
return 0;
}