窮舉算法
概念:
最簡單算法,依賴計算機的強大計算能力窮盡每一種可能的情況。窮舉算法效率不高,但是適合一些沒有明顯規律可循的場合。
思想:
在使用窮舉算法時,需要明確問題答案的范圍,這樣才可能在指定范圍搜索答案。指定范圍之后,就可以使用循環和條件判斷語句進行逐步驗證結果了。
案例:雞兔同籠問題
在一個籠子里關着若干只雞和若干兔子。一共有35個頭,和94只腳。問在一個籠子里雞和兔子各有多少個。
package cmd.chengxuyuanzhilu.arithmetic; import java.util.Scanner; /** * @author 微信公眾號:程序員之路 * 博客:http://www.cnblogs.com/chengxuyuanzhilu/ * 窮舉算法 */ public class Exhaustion { public static void exhaustion(int head,int foot){ int chicken,rabbit; for(chicken=0;chicken<= head;chicken++){ rabbit=head-chicken; if(chicken*2+rabbit*4 == foot){ System.out.println(String.format("雞有 %d只,兔子有%d只", chicken,rabbit)); } } } @SuppressWarnings("resource") public static void main(String[] args) { int head,foot; System.out.println("窮舉算法解決雞兔同籠問題"); System.out.println("輸入頭的個數"); Scanner scanner = new Scanner(System.in); head = scanner.nextInt(); System.out.println("輸入腿的個數"); foot = scanner.nextInt(); exhaustion(head, foot); } }
遞推算法
概念:
遞推算法在數學計算等方面廣泛應用。遞推算法適合有着明顯規律的場合
思想:
遞推算法往往需要用戶知道答案和問題之間的邏輯關系。在許多數學問題中,都有着明顯的計算公式可以遵循,因此可以采用遞推算法。
案例:兔子產崽子的問題
如果有兩個月大的兔子以后每個月都可以產一對小兔子,而一對小兔子出生兩個月后可以在生小兔子,也就是1月份出生,3月份才可以產崽子。那么假定一年內沒有發生死亡事件,那么現在有一對小兔子一年后共有多少對兔子。
案例分析:
1月 1對兔子
2月 1對兔子
3月 2對兔子 一對成熟兔子
4月 3對兔子
5月 5對兔子 兩對成熟兔子
6月 8對兔子 三對成熟兔子
。。。。。。
規律:前兩個月都是一對兔子,以后每個月的兔子的對數是前兩個月的總和
除1,2月份的計算公式:n月 Fn = (Fn-1)+(Fn-2)
package cmd.chengxuyuanzhilu.arithmetic; import java.util.Scanner; /** * @author 微信公眾號:程序員之路 * 博客:http://www.cnblogs.com/chengxuyuanzhilu/ * 遞推算法 */ public class Recurrence { public static int recurrence(int months){ if( months == 1 || months == 2){ return 1; }else{ int m1 = recurrence(months-1); int m2 = recurrence(months-2); return m1+m2; } } @SuppressWarnings("resource") public static void main(String[] args) { int months,rabbits; System.out.println("遞推算法解決兔子生崽子的問題"); System.out.println("輸入月數"); Scanner scanner = new Scanner(System.in); months = scanner.nextInt(); rabbits = recurrence(months); System.out.println(String.format("%d月共有兔子%d對", months,rabbits)); } }