1. 程式人生 > >簡單學完HTML+CSS+JS,現在開始看演算法(第四版)----歐幾里得演算法

簡單學完HTML+CSS+JS,現在開始看演算法(第四版)----歐幾里得演算法

歐幾里得演算法

package euclidean_algorithm;

import java.util.Scanner;

/**
 * @author ALazy_cat
 * 歐幾里得演算法的自然語言描述:
 *    計算兩個非負整數x和y的最大公約數: 若y = 0,則最大公約數為x; 否則將remainder = x % y,x和y的
 * 最大公約數即為y和remainder的最大公約數 
 */
public class EuclideanAlgorithm {
    public static void main(String[] args) {
        Scanner in 
= new Scanner(System.in); System.out.print("請輸入兩個整數: "); int x = 0, y = 0; x = in.nextInt(); y = in.nextInt(); System.out.println("x, y的最大公約數是: " + euclideanAlgorithm_01(x, y, 1)); System.out.println("---------------------"); System.out.println("x, y的最大公約數是: " + euclideanAlgorithm_02(x, y, 1)); }
//歐幾里得演算法的遞迴實現 public static int euclideanAlgorithm_01(int x, int y, int count) { //當y = 0時,遞迴結束 int remainder = 0; System.out.println("第" + count++ + "次遞迴: " + "x = " + x + " , " + "y = " + y); if (y == 0) return x; remainder = x % y; return euclideanAlgorithm_01(y, remainder, count); }
//歐幾里得演算法的迴圈實現 public static int euclideanAlgorithm_02(int x, int y, int count) { int remainder = 0; while (y != 0) { System.out.println("第" + count++ + "次迴圈: " + "x = " + x + " , " + "y = " + y); remainder = x % y; x = y; y = remainder; } System.out.println("第" + count++ + "次迴圈: " + "x = " + x + " , " + "y = " + y); return x; } }