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); } } }
