母牛每年都有一头小牛。小牛在2年内成为一头牛,从一头牛开始,我们必须计算N年中有多少只动物。
假设没有牛死...

例如在N = 5时:

第一头母牛给了2头犊牛(2岁时1头在3岁时换了另一只,然后在4,时再降到5)
总共= 4头犊牛
现在第一头母牛也已经3岁了(她在2岁时生了一头小牛,在3岁时又生了一头小牛)
总数= 2小牛。
第二头母牛也必须是2岁,所以她刚生下另一头小牛
总计= 1小腿。

总和= 1 + 4 + 2 + 1

递归随着年份的增加而继续

我最近在考试中遇到了这个问题。
我尝试使用递归,我只是一个初学者,但我做得不好。

public static void main(String args[]) {
    Scanner sc =new Scanner(System.in);
    int n= sc.nextInt();
    sc.close();
    fun(n);
}
public static void fun(int age) {
    int arr[] = new int[age-1];
    int temp=0, sum=1;
    for(int i=age-2; i>=0; i--){
        arr[temp++]=i;
    }
    sum+=arr.length;
    for(int j=0; j<age-1; j++) {
        if(arr[j]>=2) {
            fun(j);
        }
    }
    System.out.println(sum);
}

最佳答案

你可以试试看。它不是递归的(这是一个严格的要求吗?),但是它可以正确回答:

import java.util.ArrayList;
import java.util.List;

public class Bovines {

    private static final class Bovine {

        private final int birthYear;

        public Bovine(final int birthYear) {
            this.birthYear = birthYear;
        }

        public boolean isCow(final int year) {
            return (year - this.birthYear) >= 2;
        }
    }

    public static void main(final String[] args) throws Exception {

        final List<Bovine> bovineList = new ArrayList<>();
        /**/               bovineList.add(new Bovine(0));  // (initial Calf)

        for (int year=0; year <= 5; year++) {
            /*
             * Iterate over a copy of the List to avoid any parallel-update issues...
             */
            for (final Bovine bovine : new ArrayList<>(bovineList)) {
                if (bovine.isCow(year)) {
                    bovineList.add(new Bovine(year));  // (Cow has Calf)
                }
            }
            System.out.println("Year.: " + year + " Total: " + bovineList.size());
        }
    }
}

09-11 21:27