#include<iostream>
using namespace std;
//递归
int calculate1(int duck,int village)
{
duck=(duck+1)*2;
int sell=duck/2+1;
cout<<"经过第"<<village<<"个村子卖出"<<sell<<"只鸭子"<<endl;
village--;
if(village>0)
calculate1(duck,village); //递归调用
else
cout<<"出发时共赶"<<duck<<"只鸭子"<<endl;
return duck;
}
//非递归
int calculate2()
{
int sold; //在每个村子卖出的鸭子数
int left; //到达每个村子剩余的鸭子数
int end=2;//最终剩余的鸭子数
for(int i=7;i>0;i--) //用for循环语句依次输出每个村子卖出的鸭子数
{
left=2*(end+1);
sold=left/2+1;
end=left;
cout<<"经过第"<<i<<"个村子卖出"<<sold<<"只鸭子"<<endl;
}
cout<<"出发时共赶"<<left<<"只鸭子"<<endl;
return left;
}
void main()
{
int num;
cout<<"请选择用哪种方法求解?(0::递归 1:非递归):";
cin>>num;
switch(num)
{
case 0:
calculate1(2,7); //调用calculate1(duck,village)函数
break;
case 1:
calculate2(); //调用calculate2()函数
}
}
赶鸭子
最新推荐文章于 2026-02-23 00:20:42 发布
本文通过一个具体的鸭子买卖问题,深入浅出地介绍了递归与非递归两种算法实现方式,并对比了它们的优缺点。通过C++代码实例,详细展示了如何使用递归函数和循环结构来解决同一问题,帮助读者理解不同算法的特点。

629

被折叠的 条评论
为什么被折叠?



