Rekursiven Zähler

Status
Nicht offen für weitere Antworten.
F

Foolio

Gast
Hallo,

habe ein Problem: Brauche ein Programm (oder teil) der einen rekursiven Zähler realisiert.
Eingabe dazu ist z.B. die Variable max_zaehler (z.B. [4 3 2 1]). Die Funktion wird aufgerufen mit:

counter(zaehler, max_zaehler, index) <=zaehler ist Array der gleichen dimension wie max_zaehler. index ist am anfang 1

mein bisheriges Programm:


if index<length(max_zaehler)
kombination(zaehler, max_zaehler, index+1)
end

zaehler(index)=zaehler(index)+1

disp(zaehler)

if (index<length(max_zaehler) & zaehler(index+1)==0)
kombination(zaehler, max_zaehler, index+1)
end


funktioniert leider nur für Binäre Zahlweisen (sprich: max_zaehler= 1 1 1 oder 1 1 1 1 ...)

HILFE !!!
thx,
Florian
 

Wildcard

Top Contributor
Kannst du das mal genauer erklären?
Versteh noch nicht so ganz auf was das geben soll.
Wofür sind die Arrays?
 

bambi

Bekanntes Mitglied
hi,

also was genau willst du denn da zaehlen? ich versteh' erhlich gesagt nicht so ganz, was der sinn deines zaehlers ist.

ein paar mehr kommentare im code (was/ warum du was machst) waeren auch ganz hilfreich...

thx b
 
F

Foolio

Gast
Hi,
sorry!
Also im Prinzip soll er einfach durchzählen.
Bei max_zaehler = [4 3 2 1] soll das programm folgendes ausgeben:

0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 0 2 0
0 0 2 1
0 1 0 0
...
0 2 2 1
0 3 0 0
...
, wobei der Index der höchstwertigen Stelle 1 und der niedrigsten 4 ist ...


Kommentare:
if index<length(max_zaehler)
kombination(zaehler, max_zaehler, index+1) //rekursiver Aufruf mit geändertem index
end

zaehler(index)=zaehler(index)+1

disp(zaehler)

if (index<length(max_zaehler) & zaehler(index+1)==0) //wenn Programm nicht an letzter Stelle & letzte Stelle 0
kombination(zaehler, max_zaehler, index+1)
end

So wie es oben gegeben ist kann das Programm aber eben nur binär zählen

THX für die schnellen Antworten,
Florian
 

Wildcard

Top Contributor
Die Werte im Array geben also an um welches Zahlensystem es sich an der betreffenden Stelle handelt?
Du willst dann alle darstelbaren Kombinationen in einem "gemischten" Zahlensystem erhalten?
Hab ich das richtig verstanden?
Das ist ... wirr :autsch:
 
F

Foolio

Gast
Ja - stimmt.
Das dient später dazu in einem anderen Programm eine Liste von Kombinationen zu erstellen ...
Aber deine Interpretation ist 100% right!!!
Gruß Flo
 

bambi

Bekanntes Mitglied
okay, supi.
hab ich verstanden :lol:

was macht dein programm denn bis jetzt? hast du schon 'ne ausgabe, die einfach nicht funktioniert, oder passiert gar nichts???

falls du schon sowas wie 'ne ausgabe hast: her damit!
 
F

Foolio

Gast
Hi,
was das Programm bisher macht:
es zählt richtig, allerdings nur, wenn ich im Binärsystem bleibe - sprich:

0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
...
1 1 1 1

1. Fehler: die 0 0 0 0 sollte auch dabei sein, ist sie aber leider nicht :-( - OK, könnte man hinmurxen, systematische Fehlerbehebung wäre aber besser

2. Fehler: viel entscheidender - er zählt auch in anderen Systemen binär-

Gruß Flo
 

bambi

Bekanntes Mitglied
Sooo...

Also mein Vorschlag - ich muss jetzt mal so fuer 'ne Stunde (+/- 15 min) weg, hab danach aber wieder zeit.
Wenn du mir deinen kompletten code gibts (mit class und main() und was es da sonst noch so alles nettes gibt), dann schau ich mir das spaeter ganz genau an... versprochen - scheint ja irgendwie dringend zu sein, wenn ich das richtig verstanden habe.

Also...? :wink:
 

Wildcard

Top Contributor
Das ist mir spontan dazu eingefallen. Gutes Beispiel für schlechten Stil, also bitte nur als Gerüst nehmen :wink:
Code:
/**
 * TODO short description for Wirr.
 * 


 * Long description for Wirr.
 * 
 * @author Wildcard
 * @version $Revision: $
 */
public class Wirr
{

    
    private void translate(int[] array, int index)
    {
       try
       {
           if (array[index-1]<index)
           {
               array[index-1]++;
               print(array);
               translate(array,1);
           }
           else 
           {
               array[index-1]=0;
               index++;
               translate(array,index++);
           }
       }
       catch(ArrayIndexOutOfBoundsException ex)
       {
           return;
       }
    }

    /**
     * @param array
     */
    private void print(int[] array)
    {
        for (int i=array.length-1;i>=0;i--)
            System.out.print(array[i]);
        System.out.println();
        
    }

    public static void main(String[] args)
    {
        Wirr wirr = new Wirr();
        int [] array = {0,0,0};
        wirr.print(array);
        wirr.translate(array,1);
    }
}

[edit]du musst natürlich noch einbauen das die Wertigkeit nicht anhand des ArrayIndex festgelegt wird, sonder
anhand deiner Vorgaben. Will dir ja nicht die Arbeit abnehmen :D [/edit]
 

bambi

Bekanntes Mitglied
Also hab' da mal was ausprobiert - heut' iss aber irgendwie der Wurm drin - laaft also net so ganz 100%ig... :?
Vielleicht gibt's dir ja 'ne idee... schau' einfach mal rein (wollt' es jetzt nicht hier reinkopielen...)

trotzdem danke fuer die abwechslung... :lol: mir war sooo langweilig...

cu b.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben