2013-11-20 2 views
1

Я хочу, чтобы получить выходной сигнал, который отображает что-то вроде 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); 
     } 
    } 
+1

'return n + '*' + factorForm (n-1);' не делает то, что вы думаете – Henry

+0

http://stackoverflow.com/questions/2652536/reverse-factorial – bsiamionau

+0

'1 * 2 * 3 * 4 === 4 * 3 * 2 * 1' Я не понимаю, в чем проблема. – Leri

ответ

3

Вы вызываете факт (4)

Тогда вы печатаете

Тогда вы называете факт (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

Чтобы изменить выходной сигнал, 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.

+0

спасибо, что это было наиболее полезно – user3012019

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; 
    } 
} 
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; 
    } 
} 

как это. вы можете получить результаты, которые вы получаете. может быть сложным.

+0

называется метод следующим образом: factorForm (факт (5)) – PoWen

Смежные вопросы