Java:简单递归函数只返回1

Java:简单递归函数只返回1,java,algorithm,factorial,Java,Algorithm,Factorial,奇怪的是,这是我的第一个Java应用程序,我想实现一个任意精度的阶乘函数,我很好地实现了递归函数,但我的迭代函数只输出1,其他什么都没有。。对我来说已经太晚了,我不知道为什么,我不知道我哪里出错了,这里有什么明显的东西吗 public static BigInteger ifact(BigInteger n) { BigInteger ret = new BigInteger("1"); BigInteger i = new BigInteger("1"); for(i

奇怪的是,这是我的第一个Java应用程序,我想实现一个任意精度的阶乘函数,我很好地实现了递归函数,但我的迭代函数只输出1,其他什么都没有。。对我来说已经太晚了,我不知道为什么,我不知道我哪里出错了,这里有什么明显的东西吗

public static BigInteger ifact(BigInteger n) {
    BigInteger ret = new BigInteger("1");
    BigInteger i = new BigInteger("1");
    for(i = new BigInteger("0"); i.compareTo(n) == 0; i.add(new BigInteger("1"))){
        ret.multiply(i);
    }
    return ret;
}
如果您没有注意到它使用的是BigInteger包,请使用奇数书写

另外,像C一样,您可以做一些类似于typedef的事情,这样我就不需要每次都键入biginger了吗

编辑:我想我是想将ret设置为n,可能是这样,也可能不是。

尝试更改

ret.multiply(i);
ret.multiply(i);

试着改变

ret.multiply(i);
ret.multiply(i);


在回答typedef问题时,不,在Java中不能这样做

至于你的代码,它有很多错误。您的循环将只执行一次,并且仅当n等于i时。为什么在循环开始时将i初始化为1,然后再初始化为0?你为什么忽略i.add。。。?为什么你忽略了ret.yi的结果?记住,这些方法不会改变BI本身

这包括以下变化:

    BigInteger n = BigInteger.valueOf(10);
    BigInteger ret = BigInteger.ONE;
    for (BigInteger i = BigInteger.ONE; i.compareTo(n) <= 0; i = i.add(BigInteger.ONE)) {
        ret = ret.multiply(i);
    }
    System.out.println(ret);

在回答typedef问题时,不,在Java中不能这样做

至于你的代码,它有很多错误。您的循环将只执行一次,并且仅当n等于i时。为什么在循环开始时将i初始化为1,然后再初始化为0?你为什么忽略i.add。。。?为什么你忽略了ret.yi的结果?记住,这些方法不会改变BI本身

这包括以下变化:

    BigInteger n = BigInteger.valueOf(10);
    BigInteger ret = BigInteger.ONE;
    for (BigInteger i = BigInteger.ONE; i.compareTo(n) <= 0; i = i.add(BigInteger.ONE)) {
        ret = ret.multiply(i);
    }
    System.out.println(ret);

BigInteger对象是不可变的,这意味着您不能更改它。这样,它就像一个字符串对象。所以,要想让它起作用,你需要改变你的路线


BigInteger对象是不可变的,这意味着您不能更改它。这样,它就像一个字符串对象。所以,要想让它起作用,你需要改变你的路线

ret=ret.multiply i、 康帕雷顿 ret=ret.multiply
i、 compareTon还注意到有一个常量BigInteger.ONE,它避免了每次都需要创建一个新的1。还有BigInteger.ZERO,甚至10。其余的都是biginger.valueOflong…如果是硬编码的,不要使用字符串。递归?我看到一个循环。还要注意的是,有一个常量BigInteger.1,它避免了每次都需要创建一个新的1。还有BigInteger.0,甚至10。其余的都是biginger.valueOflong…如果是硬编码的,不要使用字符串。递归?我看到一个循环,我一直认为这些语句=另一个语句,而不仅仅是一个有返回值的函数。如果我需要更多的帮助,我会修正我愚蠢的错误并更新。。老兄,我不应该在早上6点编码。我非常感谢你的例子,它完全回答了我的问题。我已经起床20个小时了,在这种情况下很难学一门新语言。。我一直在修正代码,而不是逻辑。我一直认为语句=另一个语句,而不仅仅是一个带有返回值的函数。如果我需要更多的帮助,我会修正我愚蠢的错误并更新。。老兄,我不应该在早上6点编码。我非常感谢你的例子,它完全回答了我的问题。我已经起床20个小时了,在这种情况下很难学一门新语言。。我一直在修改代码,而不是逻辑。