您的位置:首页 > 编程语言 > Java开发

递归练习---求两个数的最大公约数

2015-11-07 00:00 429 查看
摘要: 其中, createTwoRandom()、createTwoRandomB() 和 createTwoRandomC();方法是为了产生两个随机数,个人感觉第二个稍微好些;水平有限啊;在测试时,最好使用随机数,并且多试验几次;以免代码有bug;

package cn.digui_2015_11_7_周六;
import java.util.Random;
/*
*  2015.11.7 8:44 周六
*  递归,求最大公约数
*/
public class MaxCommonDivisor {
private static int result = 1;;
public static int[] arr = new int[2];
public static void main(String[] args) {
createTwoRandomB();
maxComDiv(arr[0], arr[1]);
createTwoRandom();

createTwoRandomC();
}
public static void maxComDiv(int num1, int num2) {
int result = recMaxComDiv(num1, num2);
if(result != 1){
System.out.println("the value of MaxCommonDivisor is  : " + result);
}else{
System.out.println("not exists MaxCommonDivisor");
}
}
//干活出力的是这个函数
/*
* 查看百度百科 ”最大公约数“ 里,有一种算是是 ”短除符号 “算法,以这个为依据进行的设计
*/
private static int recMaxComDiv(int a, int b) {
for (int i = 2; i <= Math.min(a, b) ; i++) {
if (a % i == 0 && b % i == 0) {
result *= i;
recMaxComDiv(a / i, b / i);
break;
}
}
return result;
}

public static void createTwoRandom() {
Random random = new Random();
int i = 0;
while (true) {
int num = random.nextInt(100);
if (num >= 2) {
arr[i++] = num;
}

if (i == 2) {
break;
}
}
System.out.println("产生的两个随机数是:" + arr[0] + "  " + arr[1]);
}
public static void createTwoRandomB() {
for (int i = 0; i < 2; i++) {
arr[i] = (int) (Math.random() * 100 + 2);  //范围是[2,102)之间的随机数
}
System.out.println("产生的两个随机数是:" + arr[0] + "  " + arr[1]);
}
//下面这个方式是有问题的,当初始条件(一开始运算都)不满足while条件时,arr数组,全是默认值0
public static void createTwoRandomC() {
Random random = new Random();
int i = 0;
int num;
while ((num = random.nextInt(100)) >= 2 && i < 2) {
arr[i++] = num;
}
System.out.println("产生的两个随机数是:" + arr[0] + "  " + arr[1]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 递归 随机数