Java-программа града

Я работаю над программой последовательности градин, в которой пользователь выбирает положительное целое число. Если число четное, оно будет разделено на два. Если число нечетное, оно будет умножено на три и добавлено к единице. Программа будет продолжаться до тех пор, пока число не станет равным 1. Программа также сообщит пользователю количество шагов, которое потребовалось для достижения 1.

Цель состоит в том, чтобы сделать это рекурсивно, моя проблема в том, что я не могу объявить каждый шаг пользователю, поскольку вычисление происходит с числом, например, «число, поэтому я делю на 2, и это =»

Пока это мой код, любые предложения или альтернативы помогут.

Спасибо

import javax.swing*

{
   public class hailstone {
   static int Count;
   static int HailstoneNumbers(int Num)
   output += (Num + " " ) ;
   JOptionPane.showMessageDialog(null, output);

    if (Num == 1 && Count == 0) {
        return Count;

    }
    else if (Num == 1 && Count != 0) {
        //n-1
        Count++;
        return Count;
    }
    else if (Num % 2 == 0) {
        Count++;
        HailstoneNumbers(Num / 2);
    }
    else if (Num % 2 != 0) {
        Count++;
         HailstoneNumbers(3 * Num + 1);
    }
    return Count;


}

public static void main(String[] args)
{
    int Num = Integer.parseInt(JOptionPane.showInputDialog("\n Enter a positive number"));
    int x;

    x = HailstoneNumbers(Num);


   JOptionPane.showMessageDialog(null, "Number of Steps" + x );
}

}

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
414
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы звоните HailstoneNumbers(Num / 2);. Если вы хотите сделать это рекурсивно, функция должна возвращать себя на каждом шаге, например return HailstoneNumbers(Num / 2);. Кроме того, если вы изменяете глобальную переменную, рекурсивность бессмысленна. Вот пример:

int hailstone(int i, int steps) {
    steps++;
    if (i == 1) return steps;
    if (i % 2 == 0) return hailstone(i / 2, steps);
    else return hailstone(i * 3 + 1, steps);
}

// main function
x = hailstone(num, 0);

Обратите внимание, что по соглашению функции и переменные не должны начинаться с заглавной буквы, если только они не final.

Другое решение. Упрощено, поместив оператор печати в метод. Кроме того, пользователю не нужно беспокоиться об инициализации счетчика шагов, поэтому я перегрузил метод collatz. Примечание. Официальное название этого метода — Collatz Conjecture, поэтому я назвал методы соответственно.


   public int collatz(int v) {
      return hail(v, 0);
   }

   private int collatz(int v, int count) {
      System.out.println(v);
      if (v != 1) {
         return hail((v & 1) == 1 ? v * 3 + 1
               : v / 2, count + 1);
      }
      return count;
   }

Другие вопросы по теме