Generator słów – jak przerobić kod na rekurencyjny?

0

Próbuję stworzyć generator słów po danym alfabecie iteracyjnie bo nie wiem jak się wziąć za rekurencyjny ale widzę że jestem w ciemnej uliczce bo gdy alfabet będzie miał więcej niż 10 liter to moje podejście nie będzie działało i chyba powinienem całkowicie zmienić podejście ale nie wiem jak zacząć

public
class Message
{
private
  char[] alfabet; // abc
private
  int[] haslo; // 000=aaa, 001=aab
private
  int n; // dlugosc slowa
private
  int L;

public
  Message(char[] alfabet, int[] haslo, int n, int L)
  {
    this.alfabet = alfabet;
    this.haslo = haslo;
    this.n = n;
    this.L = L;
  }

  void haslogen(int n, int L, int level, int[] alfabet, int[] haslo)
  {
    if (level == n) {
      haslo[level] = 0;
      System.out.println("haslo");
    } else {
      for (int i = 0; i < L; i++) {
        haslo[level] = i;
        haslogen(n, L, level + 1, alfabet, haslo);
      }
    }
  }

  void haslo_next(int n, int L, char[] alfabet, int[] haslo)
  {
    // slowo wykorzystalo alfabet
    Boolean flaga = false;
    for (int i = 0; i < n; ++i)
      if (haslo[i] != n) {
        flaga = false;
        break;
      } else {
        try {
          flaga = true;
          throw new GenNoweHaslo("nowe haslo");
        } catch (GenNoweHaslo ex) {
          Logger.getLogger(Message.class.getName()).log(Level.SEVERE, null, ex);
        }
      }
    StringBuilder sb = new StringBuilder();
    // zwiekszanie hasla

    for (int i = 0; i < n; ++i)
      sb.append(haslo[i]);
    int slowo = Integer.parseInt(sb.toString());
    ++slowo;

    // ukladanie hasla na czyetlna forme

    for (int i = 0; i < n; ++i)
      sb.append(alfabet[haslo[i]]);

    String myString = "1234";
    int foo = Integer.parseInt(myString);
    if (haslo[])
  }
}

tzn wyprowadzanie nowych słów jeszcze nie działa ale i tak by działało dla 9 liter alfabetu

0

Przepraszam, lecz nie zrozumiałem. Dlaczego chcesz przerobić kod na rekurencje i w czym by Ci to miało pomóc?

private int[] haslo; // 000=aaa, 001=aab

Polecałbym użyć klasy String do przechowywania łańcuchów znaków

0

PRoblem został rozwiązany, jeśli chciałbyś zrobić iteracyjnie generator słów to byś miał b.dużą złożoność i sam kod byłby bardzo toporny

0
masterkwi napisał(a):

PRoblem został rozwiązany, jeśli chciałbyś zrobić iteracyjnie generator słów to byś miał b.dużą złożoność i sam kod byłby bardzo toporny

Co? :D Więc żeby zmniejszyć złożoność jakiegoś algorytmu wystarczy go przerobić na rekurencję?

PS: Tylko nie zakładaj nowego pytania na forum jak dostaniesz StackOverflowException.

0
TomRiddle napisał(a):
masterkwi napisał(a):

PRoblem został rozwiązany, jeśli chciałbyś zrobić iteracyjnie generator słów to byś miał b.dużą złożoność i sam kod byłby bardzo toporny

Co? :D Więc żeby zmniejszyć złożoność jakiegoś algorytmu wystarczy go przerobić na rekurencję?

PS: Tylko nie zakładaj nowego pytania na forum jak dostaniesz StackOverflowException.

No dobra ale piszę się łatwiej xD, tzn widziałem że iteracyjnie to będzie to koszmar napisać

1 użytkowników online, w tym zalogowanych: 0, gości: 1