递归因子公式

时间:2013-11-20 07:23:48

标签: java recursion

我想获得一个显示类似1*2*3*4的输出,但我得到4*3*2*1 这是我的代码:

public static int fact(int n)

    {
        if(n ==1)
            return 1;
        else
            return n * fact(n-1);
    }

    public static int factorForm(int n)
    {
        System.out.print(n);
        if (n == 1)
            return 1;
        else
        {
            System.out.print("*");
            return n + '*' + factorForm(n-1);
        }
    }

4 个答案:

答案 0 :(得分:3)

你正在呼唤事实(4)

然后你打印

然后你称之为fact(3)

如果你颠倒过来,你会得到你想要的东西:

public class fact { 
  static int f(int n)
  {
    if (n ==1 )
    {
        System.out.print(1);
        return 1;
    }
    int ret= (n * f(n-1));
    System.out.print("*");
    System.out.print(n);
    return ret;
  }

  public static void main(String[] args)
  {
    int ret=f(4);
    System.out.print("=");
    System.out.println(ret);
  }
}

答案 1 :(得分:1)

要反转输出,应在进行递归调用后打印n

public static int factorForm(int n)
{
    if (n == 1)
    {
        System.out.print(1);
        return 1;
    }
    else
    {
        int rest = factorForm(n-1); // prints 1*2*...*n-1
        System.out.print("*");
        System.out.print(n);
        return rest * n;
    }
}

表达式n + '*' + factorForm(n-1)执行整数加法,而不是乘法或字符串连接。我改变它来执行乘法运算。如果打算返回打印的字符串,则返回类型和rest的类型应更改为String,基本情况下的返回值应为"1",并且该表达式应更改为rest + "*" + n

答案 2 :(得分:0)

如下打印后返回,更重要的是了解递归的工作原理:

public static int factorForm(int n)
{        
    if (n == 1){
        System.out.print("1*");
        return 1;
    }
    else
    {            
        int val = n * factorForm(n-1);            
        System.out.print(n + "*");
        return val;
    }
}

答案 3 :(得分:0)

如果你想得到1 * 2 * 3 * 4的结果。我想你可以做到这一点。 这是我的代码:

public static String fact(int n) {
    if (n < 1) {
        throw new RuntimeException("n must be int type and up 0");
    }
    else if (n == 1) {
        return "1";
    } else {
        return n + "*" + fact(n - 1);
    }
}

public static String factorForm(String str) {
    String [] arr = str.split("\\*");
    String [] newArr = new String[arr.length];
    String result = "";
    if (arr.length > 1) {
        for (int i = 0; i < arr.length; i++) {
            newArr[arr.length - i - 1] = arr[i];
        }
        for (int i = 0; i < newArr.length; i++) {
            result += newArr[i] + (i != newArr.length - 1 ? "*" : "");
        }
        return result;
    } else {
        return str;
    }
}

像这样。你可以得到你得到的结果。可能很复杂。