本帖最后由 冥月影 于 2019-8-20 22:26 编辑
各位大佬,我表达有点菜,而且问题有点迷,可能要看完图片才能知道我想说什么,如果有空,帮忙看下,谢谢前两天刚学了一点点递归的知识,今天用递归写了一个分数化简的方法,可是和想象中有点不一样各位大佬们看,我想在得到最简的分数后就退出,可是不知道怎么设置条件,还有,那个控制循环的那个n不知道怎么取才好
代码:
[Java] 纯文本查看 复制代码 package test;
public class FenShu {
static int count = 0;
static int fenZi = 0;
static int fenMu = 0;
public static void main(String[] args) {
// TODO 自动生成的方法存根
// int n = (fz < fm ? fz : fm);
int fz = 150, fm = 100;
int[] fs = huajian(fz, fm);
shuChu(fs[0], fs[1]);
System.out.println("共运行了" + count + "次");
}
/**
* 根据大佬给的改过来的
* @param fz
* @param fm
* @return
*/
public static int[] huajian(int fz, int fm) {
int min = fz < fm ? fz : fm;
for(int i = 2; i < min; i++) {
count++;
if (fz%i == 0 && fm %i == 0) {
return huajian(fz/i, fm/i);
}
}
int[] fs = {fz, fm};
return fs;
}
/**
* 化简
* @param fz 分子
* @param fm 分母
* @param n 取两数较小值
*/
public static void huaJian(int fz, int fm, int n) {
for (int i = 2; i <= n; i++) {
count++;
// if (count < 1000) {
System.out.println("1, fz = " + fz + ", fm = " + fm + ", n = " + n + ", i = " + i + ", count = " + count);
// }
if (fz % i == 0 && fm % i == 0) {
fz /= i;
fm /= i;
n = fz < fm ? fz : fm;
fenZi = fz;
fenMu = fm;
huaJian(fz, fm, n);
System.out.println("2, fz = " + fz + ", fm = " + fm + ", n = " + n + ", i = " + i + ", count = " + count);
}
}
}
public static void shuChu(int fz, int fm) {
if(fz == fm || fm == 1) {
System.out.println("结果为: " + (fz / fm));
} else {
System.out.println("结果为: " + fz + "/" + fm);
}
}
}
我用了两组数来测试,明明可以早早就结束了的,可是不知道怎么退出,还有,那个控制循环次数的,数越小消耗的次数就少,数如果较大就会出现次数需要消耗接近最小的那个数
各位大佬帮忙看下问题在哪, 谢谢
第一组, 150/100
控制循环次数用n
控制循环次数用i
第二组数 23648/2836
控制循环次数用n
控制循环次数用i
|