2016-03-03 4 views
0

Я пишу простой код на Java, который использует рекурсию. Я хочу показать продукт двух чисел, которые будет вводить пользователь. Мне удалось это сделать, используя рекурсию, но застрял в точке, где я хочу показать, что продукт можно записать как (пример) 10 * 5 = 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 (10 раз) или 12 * 3 = 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3 (12 раз). Вот мой код до сих пор. В коде я поставлю комментарий, где он должен быть написан (пример). Благодарю.Умножение Java с использованием Recursion

import java.util.Scanner; 

public class RecursiveMultiplication { 

public static void main(String[] args) { 
    Scanner key = new Scanner(System.in); 
    int a, b; 
    System.out.print("Enter first number: "); 
    a = key.nextInt(); 
    System.out.print("Enter second number: "); 
    b = key.nextInt(); 
    System.out.println("The product of " + a + " and " 
      + b + " is: " + multiRec(a, b)); 
    System.out.println("It could also be written as: "); //Here should product be broken into smaller numbers 


} 

public static int multiRec(int x, int y) { 
    if (x == 0 || y == 0) { 
     return 0; 
    } else { 
     if (x == 1) { 
      return y; 
     } else { 
      return x + (multiRec(x, y - 1)); 
     } 
    } 

    } 

} 
+0

Есть ли конкретная проблема, с которой вы сталкиваетесь с кодом? – Castaglia

+0

Проблема в том, что я не знаю, как разбить продукт на меньшие числа и показать его пользователю. Как я сказал в примере (10 * 5 = 50). Теперь, я хочу написать этот продукт как 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 на экране – Ivanko

ответ

3

StringBuilder должен быть defiend, как

StringBuilder buf = new StringBuilder (a); 

Pass этого StringBuilder В параметре в multiRec

, а затем изменить multiRec быть

public static int multiRec(int x, int y, StringBuilder buf) { 
    if (x == 0 || y == 0) { 
     return 0; 
    } else { 
     if (x == 1) { 
      return y; 
     } else { 
      buf.append (" + ").append (x); 
      return x + (multiRec(x, y - 1, buf)); 
     } 
    } 

    } 

} 

Затем, когда завершаются просто распечатайте его значение

+0

Ударьте мне на это :-) –

0
import java.util.Scanner; 

public class RecursiveMultiplication { 
    public static void main(String[] args) { 
     Scanner key = new Scanner(System.in); 
     int a , b; 
     System.out.print("Enter first number: "); 
     a = key.nextInt(); 
     System.out.print("Enter second number: "); 
     b = key.nextInt(); 
     System.out.printf("%d %s %d %s",a , "*" , b ,"= "); 
     System.out.println("\nThe product of " + a + " and " 
       + b + " is: " + multiRec(b, a)); 
     // System.out.println("It could also be written as: "); //Here should product be broken into smaller numbers 


    } 

    public static int multiRec(int x, int y) { 

     if (x == 0 || y == 0) { 
      return 0; 
     } else { 
      System.out.print(x+" "); 
      if (y == 1) { 
       return x; 
      } else { 
       System.out.print(" + "); 
       return x + (multiRec(x, y - 1)); 
      } 
     } 

     } 
} 
+0

Оба примера помогли мне понять, как достичь чего Мне нужно. Единственное, что нужно форматировать. В обоих случаях есть знак + в конце последнего меньшего числа. Вот что я имею в виду. Выход: Введите первый номер: 10 Введите второй номер: 5 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + Продукт 10 и 5: 50 – Ivanko

+0

В приведенном выше коде, Я уже позаботился о последнем символе «+». –

+0

Извините, вы сделали. Я ценю вашу помощь. Я нашел другую проблему сейчас, когда я ставлю 10 в качестве первого номера и 5 в качестве второго номера, вот вывод: Введите первый номер: 10 Введите второй номер: 5 10 * 5 = 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 Продукт 10 и 5: 46 (Не знаю, почему это 46). Также я попытался написать «Продукт 10 и 5 равен 50», а затем ниже «Это также может быть записана как: 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5. – Ivanko