递归案例 ---- 母牛生小牛

项目场景:

提示:这里简述项目相关背景:

// 有一头小母牛。从第四年起每年生一头小母牛。
// 生的小母牛也是从第四年起每年生一头小母牛。
// 如此循环。编程求N年后有多少头母牛。。。。。。。
/*
* 思路:递归套娃
* Year count
* 1 1
* 2 1
* 3 1
* 4 2
* 5 3
* 6 4
* 7 6
* 8 9
* …
*/


代码编写

提示:这里描述项目中遇到的问题:

递归:函数中调用自身
1.递归必须要有出口 否则会导致栈空间溢出
2.每一次的结果都依托于上一次的计算,没调用一次自身,就会在内存的栈空间中开辟一个独立的空间,知道递归出口(栈顶)的出现,然后后进先出从上到下逐层计算出结果
3.每个占空间中的变量独立 互不影响

package OOP.Recurve;

import javax.lang.model.util.ElementScanner6;

public class cowCreateLittle {
    public static void main(String[] args) {
        // 有一头小母牛。从第四年起每年生一头小母牛。
        // 生的小母牛也是从第四年起每年生一头小母牛。
        // 如此循环。编程求N年后有多少头母牛。。。。。。。
        /*
         * 思路:递归套娃
         * Year count
         * 1 1
         * 2 1
         * 3 1
         * 4 2
         * 5 3
         * 6 4
         * 7 6
         * 8 9
         * ............
         */
        Cow cow1 = new Cow();
        int res = cow1.getRes(11);
        if (res == 0) {
            System.out.println("请输入合法数据");
        } else {
            System.out.println("有羊" + res + "只");
        }
    }
}

class Cow {
    public int getRes(int n) {
        if (n > 0) {
            if (n < 4) {
                return 1;
            }
            return getRes(n - 1) + getRes(n - 3);
        } else {
            return 0;
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值