2015-01-28 2 views
0

я хочу, чтобы напечатать как:ява номер рекурсии печать только с 1 параметром

5 
54 
543 
5432 
54321 

я сделал программу, но она не уменьшается рекурсивно:

public static void main(String[] args){ 

     func(5); 
    } 
    public static String func(int num){ 

     String temp = ""; 
     if(num == 0){ 
      return ""; 
     } 
     temp = temp + num; 
     System.out.println(temp); 

     return temp + func(num-1); 
} 

мои выше программа печатает как:

5 
4 
3 
2 
1 

Вопрос: Можно ли использовать только один параметр (num) рекурсивно? потому что я смог сделать рабочую программу на этом, используя «» и num как параметры. я хочу только 1. Я избегаю цикла для рекурсивного метода. Является ли это возможным? Я думал о решениях, подобных определенным дням, и, похоже, не думал об этом.

ответ

0

просто передать строку вдоль

public static void main(String[] args){ 
    func("", 5); 
} 
public static String func(String tmp, int num){ 
    if(num > 0) { 
     String res = tmp + num; 
     System.out.println(res); 
     return func(res, num - 1); 
    } else { 
     return tmp; 
    } 
} 
+0

это тоже мое решение. поэтому я думаю, что лучший способ - использовать два параметра. Я не осмелюсь подумать об использовании 1 параметра? хе-хе. –

0

вы инициализации темп опустошить при каждом вызове

public static String func(int num, String temp){ 

    if(num == 0){ 
     return ""; 
    } 
    temp = temp + num; 
    System.out.println(temp); 

    return temp + func(num-1, temp); 
} 

public static void main(String... d) { 
    func(5, ""); 
+0

, так что только 1 параметр невозможен? –

0

Вы уверены, что вы не хотите использовать два Params? Потому что нечто подобное возможно.

String function1(int num, int max) 
{ 
    if(num=0) 
    return; 
    for(i=max; i=num; i--) 
    { 
    System.out.print(i); 
    } 
    System.out.print('\n') 
    function1(num-1, max); 
} 

Другая идея только один парами будет это:

String function2(int num){ 
    int dig = num % 10;  // Get last digit from param 
    last dig --;   // new last Digit 
    if (dig !=0) 
    { 
     num = num * 10 + dig; //Add dig to the right side. 
     System.out.println(num); 
     return function2(num); 
    }else 
    { 
     return ""; 
    } 
} 

Но эта функция работает только с целыми числами меньших 10. Поэтому я бы рекомендовал использовать функцию с двумя параметрами, например выше.

Если у вас уже есть программа с одним параметром, используйте функцию обертки.

String function(int num) 
{ 
    return function1(num, num); 
} 
+0

Я думаю, что лучший способ - использовать 2 параметра. мой мозг просто для новичка. –

+0

Да, лучший способ - использовать два параметра. Один из @ user2402896 довольно приятный. Если вы не хотите переписывать программу otehr, используйте обертку.Но я не думаю, что это слишком много усилий для исправления кода. – morgelo

0

Одна из версий параметров (обновлен):

public static void main(String[] args){ 
    func(5); 
} 

public static String func(int num){ 
    String numStr = num + ""; 
    int lastDigit = Integer.valueOf(numStr.substring(numStr.length() - 1)).intValue(); 
    if (lastDigit == 0){ 
     return numStr.substring(0, numStr.length()-1);; 
    } 
    System.out.println(numStr); 
    int newNum = num * 10 + lastDigit - 1; 
    return func(newNum); 
} 

Это делает то, что вы описали, и возвращает последнее значение в виде строки.

0

Вам необходимо отслеживать String temp вне рекурсивной функции (так как вы не хотите передавать ее).

Вы могли бы сделать так:

class Main { 
    private static String temp = ""; 
    public static String func(int num){ 
    if(num == 0){ 
     return ""; 
    } 
    temp = temp + num; 
    System.out.println(temp); 

    return temp + func(num-1); 
    } 

    public static void main(String[] args) { 
    func(5); 
    } 
} 

Или так:

class Main { 
    public static void main(String[] args) { 
    Func func = new Func(); 
    func.apply(5); 
    } 
} 

class Func { 
    String temp = ""; 

    public String apply(int num) { 
    if (num == 0){ 
     return ""; 
    } 
    temp = temp + num; 
    System.out.println(temp); 

    return temp + apply(num-1); 
    } 
} 
0

Вы можете использовать общедоступную однопараметрический один и частные Двухпараметрическую один.

private static String func(int num, String soFar) { 
    if (num == 0) { 
     return soFar; 
    } 
    soFar += num; 
    System.out.println(soFar); 

    return func(num - 1, soFar); 
} 

public static String func(int num) { 
    return func(num, ""); 
} 

func(5); 
5 
54 
543 
5432 
54321 
Смежные вопросы