2016-10-12 31 views
0

我试图在Java中使用递归构建以下字符串。预期产出为:尝试使用Java中的递归构建字符串

4! = 4!
= 4 * 3!
= 4 * 3 * 2!
= 4 * 3 * 2 * 1!
= 4 * 3 * 2 * 1 * 0!

这是我的阶乘方法:

public static String factorial(int n, int count, String equation) 
{ 
    if (n == 0) { 
     return equation += (n + "!"); 
    } else { 
     equation += (n - count); 
     return factorial(n - 1, count, equation); 
    } 
} 

我输入下面的输入在我main方法: “”

System.out.print(factorial(4, 0, "")); 

目前,它打印出字符串我还没有很多的递归工作。我究竟做错了什么?

+0

调用'System.out.print(factorial(4,0,“”));' – erencan

+1

'equation + =(n - count)的期望输出是什么;'你不是构建其余的在你的字符串中添加语句 - 当你想要类似的东西时,你只需要添加一个数字(比如'4')。('4 +' –

+0

不确定你试图用这个析因程序达到什么目的,但是在数学上,n!equates到'n X(n-1)X ... 1'。例如4!= 4 X 3 X 2 X 1.然而,你正在做4 + 3 + 2 + 1. – VHS

回答

0

我改变了一些你的代码,然后代码就可以实现自己的目标。这里是代码。我希望这可以帮助你。

public class Snippet { 
    public static String factorial(int n, String equation) 
    { 
     if (n == 0) { 
      return equation += (n + "!"); 
     } else { 
      equation += (n + "*"); 
      return factorial(n - 1, equation); 
     } 
    } 

    public static void factorial1(int n, String equation) 
    { 
     if(n < 0) 
     { 
      return; 
     } 
     System.out.println(equation + n + "!"); 
     factorial1(n - 1, equation + n + "*"); 
    } 

    public static void main(String [] arg) 
    { 
     System.out.println("4! "); 
     System.out.println(factorial(4, "=")); 
     System.out.println(); 
     factorial1(4, "="); 
    } 
} 
0

如果你想只使用一个递归函数来实现自己的目标,这将需要嵌套递归。你可能想尝试像下面的内容:

public class Factorial { 

    public static void main(String[] args) { 
     System.out.println(factorial(4)); 
    } 

    private static String factorial(int origNum, int lineNum, int innerLoopNum, String equation) {  
     if(innerLoopNum == origNum - lineNum) { 
      equation = equation + innerLoopNum + "!" + "\n"; 
     } 
     else if(lineNum > origNum) 
      return equation; 
     else { 
      equation = equation + innerLoopNum + "*"; 
      equation = factorial(origNum, lineNum, --innerLoopNum, equation); 
      return equation; 
     } 

     ++lineNum; 
     if(lineNum > origNum) 
      return equation; 

     return factorial(origNum, lineNum, origNum, equation);  
    } 

    public static String factorial(int n) { 
     return factorial(n, 0, n, ""); 
    } 
} 
0

假设ň永远不会是负的,这应该足够了......

public String factorialString(int n) { 
    if (n == 0) return "0!"; 
    return n + " * " + factorialString(n - 1); 
} 

只是为了好玩,你也可以写为:

public String factorialString(int n) { 
    return (n == 0) 
     ? "0!" 
     : n + " * " + factorialString(n - 1); 
} 

保护有关的人,我知道我在做字符串连接我应该使用StringBuilder来代替。任务是在这里演示递归。