在刚刚开始关于牛群问题,为了能更容易理解以及解决,我们可以利用递归的方法来解决这个问题;
不废话,直接上代码。
#include<iostream>
using namespace std;
int niu(int year,int& num){
for(int i=1;i<=year;i++){
if(i>=4&&i<15){
num++; //在绝育前的可生育的每一年都可以每年生一头母牛
niu(year-i+1,num); //计算小牛生的牛数量
}
if(i==20){ //当一头牛20岁时,则死亡
num--;
}
}
return num; //返回牛群的总数量
}
int main(){
int num=1 //初始只有一头牛
int y;
cout<<"请输入一共有多少年:";
cin>>y;
cout<<y<<"年后,一共有"<<niu(y,num)<<"头牛"<<endl;
return 0;
}
在代码中我们可以知道,每递归一次,就可判断生下来的小牛是否可以生母牛,其递归中的 year-i+1 是小牛的年龄,有些人可能不知道未什么最后还要+1,这是因为当第一头牛生下的小母牛时,每过一年,小牛也要长一岁,例如七年后 大牛是七岁,小牛是四岁,它们会在同一年都生下一头牛。我也解释不清楚。....呜呜呜... 就比如当year=7时,7-i(i=4)=3,递归的话小于4,所以要在后面+1。