一个农场有头母牛,现在母牛才一岁,要到四岁才能生小牛,四岁之后,每年生一头小牛,n年后有多少头小牛

1 题目描述

一个农场有头母牛,现在母牛才一岁,要到四岁才能生小牛,四岁之后,每年生一头小牛。

假设每次生的都是母牛,并且也遵守4年才生育并生母牛的原则。且所生的牛都不会死

问20年之后共有多少头牛


2 采用递归实现,代码如下

package arithmetic.cowNumber;

public class CowNumber {

	/*
	 * years表示多少年后
	 * 
	 * */
	public static int getCowNumber(int years){
		int total = 1; // 当前有一头牛
		int temp = 0 ; // 临时变量
		if(years > 0){ 
			while(years!=0){
			  if(temp >= 2){ //当前为1岁 ,2年之后为4岁
				  total += getCowNumber(years-2); // 这里是一个递归, 2年后母牛生一头小牛,而小牛又像当初的母牛一样2年后生小牛,不断循环
				}
			  temp++;
			  years--;
			}
		
		}
		return total;
	}
	

	
	public static void main(String[] args) {
		int total =0;
		for(int i = 1 ; i <= 20; i++){
			total = CowNumber.getCowNumber(i);
			System.out.println("第 "+i+ "年后  : " + total +" ");	
		}
		
	}

}




3 输出结果如下

第 1年后  : 1 
第 2年后  : 1 
第 3年后  : 2 
第 4年后  : 3 
第 5年后  : 4 
第 6年后  : 5 
第 7年后  : 7 
第 8年后  : 10 
第 9年后  : 14 
第 10年后  : 19 
第 11年后  : 26 
第 12年后  : 36 
第 13年后  : 50 
第 14年后  : 69 
第 15年后  : 95 
第 16年后  : 131 
第 17年后  : 181 
第 18年后  : 250 
第 19年后  : 345 
第 20年后  : 476 



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 这是一道递归问题,可以用以下的递归函数来求解: def count_cows(n): if n <= 3: return n else: return count_cows(n-1) + count_cows(n-3) 其中,n表示第几年,函数返回值为第n年时的母牛数量。 解释一下递归函数的实现: - 当n小于等于3时,母牛数量就是n,因为前三年每年只有一头母牛。 - 当n大于3时,第n年母牛数量等于第n-1年的母牛数量加上第n-3年的母牛数量,因为第n年母牛数量等于第n-1年的母牛数量加上第n-2年的母牛数量,而第n-2年的母牛数量又等于第n-3年的母牛数量加上第n-4年的母牛数量,以此类推。 因此,我们可以通过递归调用count_cows函数来求解第n年母牛数量。 ### 回答2: 首先,我们需要明确题目所给出的规律,即小母牛从出之后第四年开始每年一头母牛。因此,我们可以利用递归函数来解决这个问题。 假设在第 n 年,牛的总数为 f(n),我们可以按照以下思路递归求解: 1. 在第一年,母牛的数量为 1,即 f(1) = 1; 2. 在第二年,母牛的数量还是 1,即 f(2) = 1; 3. 在第三年,母牛的数量也还是 1,即 f(3) = 1; 4. 在第四年,小母牛开始育,此时牛的总数为前一年的数量加上新的小母牛数,即 f(4) = f(3) + 1; 5. 在第五年,小母牛继续育,此时牛的总数为前一年所有母牛的数量加上小母牛数,即 f(5) = f(4) + f(2); 6. 在第六年,同理,牛的总数为前一年所有母牛的数量加上小母牛数,即 f(6) = f(5) + f(3); 7. 以此类推,第 n 年的总数等于前一年所有母牛的数量之和再加上小母牛数,即 f(n) = f(n-1) + f(n-3)。 特别的,当 n <= 3 时,牛的总数为 1。 因此,我们可以使用如下的 Python 代码来实现递归函数: ```python def cow_number(n): if n <= 3: return 1 else: return cow_number(n-1) + cow_number(n-3) ``` 当输入 n = 10 时,该函数将会返回数值 6,即第 10 年时牛的数量为 6 。 ### 回答3: 小牛问题是一个经典的递归问题。根据题意,从第四年开始,每年都会多出一头母牛,所以可以利用递归函数求解。 首先我们可以设定一个 base case,当年份小于等于 3 的时候,母牛的数量都是 1。当 n 大于 3 的时候,我们可以通过以下递归式子求解: f(n) = f(n-1) + f(n-3) 其中 f(n) 表示第 n 年的母牛数量。这个式子的含义是,第 n 年的母牛数量等于前一年的母牛数量加上三年前的母牛数量。这是因为在第 n 年的时候,会有 n-3 这些母牛分别一头母牛,而这 n-3 母牛正好对应着第 n-3 年的母牛数量。 利用这个递归式子,我们可以写出以下的 Python 代码: def num_of_cows(n): if n <= 3: return 1 else: return num_of_cows(n-1) + num_of_cows(n-3) 这里的 if 语句判断当前的年份是否小于等于 3,如果是的话直接返回 1。否则就利用递归式子计算第 n 年的母牛数量。 接下来我们可以用一个例子来验证一下这个函数的正确性。假设我们要计算第 8 年的母牛数量,那么根据递归式子: f(8) = f(7) + f(5) = (f(6) + f(4)) + (f(4) + f(2)) = ((f(5) + f(3)) + (f(3) + f(1))) + ((f(3) + f(1)) + 1) = (((f(4) + f(2)) + 2) + (2 + 1)) + ((2 + 1) + 1) = (((f(3) + f(1)) + (f(1) + 1)) + 2) + 3 = (((1 + 1) + (1 + 1)) + 2) + 3 = 9 可以看到,根据递归式子计算得到的结果是 9,和实际的答案也是相符的。 综上所述,小牛问题可以用递归函数求解,当 n 小于等于 3 的时候,母牛数量为 1,当 n 大于 3 的时候,母牛数量等于前一年的母牛数量加上三年前的母牛数量。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值