窮舉算法和遞推算法(Java)


窮舉算法

概念:

最簡單算法,依賴計算機的強大計算能力窮盡每一種可能的情況。窮舉算法效率不高,但是適合一些沒有明顯規律可循的場合。

 

思想:

在使用窮舉算法時,需要明確問題答案的范圍,這樣才可能在指定范圍搜索答案。指定范圍之后,就可以使用循環和條件判斷語句進行逐步驗證結果了。

 

案例:雞兔同籠問題

在一個籠子里關着若干只雞和若干兔子。一共有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月份才可以產崽子。那么假定一年內沒有發生死亡事件,那么現在有一對小兔子一年后共有多少對兔子。

 

案例分析:

11對兔子

21對兔子

32對兔子 一對成熟兔子

43對兔子

55對兔子 兩對成熟兔子

68對兔子 三對成熟兔子

。。。。。。

規律:前兩個月都是一對兔子,以后每個月的兔子的對數是前兩個月的總和

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM