package com.bornsoft.test.capitalpool.tyc; /** * @author shusheng * @description * @Email shusheng@yiji.com * @date 2018/10/16 8:52 */ public class DiGuiDemo1 { public static void main(String[] args) { System.out.println(jieCheng(3)); System.out.println(buSiShenTu(20)); } /** * 需求:请用代码实现求5的阶乘。 * 下面的知识要知道: * 5! = 1*2*3*4*5 * 5! = 5*4! */ public static int jieCheng(int n) { if (n == 1) { return 1; } else { return n * jieCheng(n - 1); } } /** 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子, 假如兔子都不死,问第二十个月的兔子对数为多少? *分析:我们要想办法找规律 *兔子对数 * 第一个月: 1 * 第二个月: 1 * 第三个月: 2 * 第四个月: 3 * 第五个月: 5 * 第六个月: * ... 8 *由此可见兔子对象的数据是: * 1,1,2,3,5,8... *规则: *A:从第三项开始,每一项是前两项之和 *B:而且说明前两项是已知的 * *如何实现这个程序呢? *假如相邻的两个月的兔子对数是a,b *第一个相邻的数据:a=1,b=1 *第二个相邻的数据:a=1,b=2 *第三个相邻的数据:a=2,b=3 *第四个相邻的数据:a=3,b=5 *看到了:下一次的a是以前的b,下一次是以前的a+b */ public static int buSiShenTu(int n) { if (n == 1 || n == 2) { return 1; } else { return buSiShenTu(n - 1) + buSiShenTu(n - 2); } } }