iterative funktion in rekursive umschreiben



  • Hallo alle zusammen!!!
    Ich habe hier eine iterative Funktion um in einer einfach verketteten Liste die position eines angegebenen elements auszugeben.

    public int countElem_iter(int key){
        	int counter = 1;
        	ListNodeSL current = this.anchor;
        	while(current.getNext()!=null){
        		if(key==current.getKey())
        			return counter;
        		else
        			counter++;
        			current = current.getNext();
        	}
        	return 0;
        }
    

    Kann mir jemand helfen diese Funktion in eine rekursive umzuschreiben
    Mein Ansatz ist:

    public int countElem_rec(int key){
        	ListNodeSL current = this.anchor.getNext();
    		while(current.getNext()!=null){
    			if(key==current.getKey()){
    				current = current.getNext();
    				return 0+countElem_rec(current.getKey());
    			}
    			else{
    				current = current.getNext();
    				return 1+countElem_rec(current.getKey());
    			}
    		}
    		return 0;
        }
    

    Ich weiß einfach nicht wie ich immer wieder das Programm mit dem nächsten Element aufrufe ohne mit dem anker rumzuhantieren. Ich weiß einfach nicht wie ich die Liste durchlaufen soll ohne Hilfsvariable den die wird ja bei jedem Funktionsaufruf immer wieder neu initialisiert. 😕 😕



  • java-starter schrieb:

    Ich weiß einfach nicht wie ich immer wieder das Programm mit dem nächsten Element aufrufe ohne mit dem anker rumzuhantieren. Ich weiß einfach nicht wie ich die Liste durchlaufen soll ohne Hilfsvariable den die wird ja bei jedem Funktionsaufruf immer wieder neu initialisiert.

    Du übergibts das next element im rekursiven Aufruf und schmeißt den Anker am Anfang der Methode raus.

    In etwa so(nicht getestet):

    //du übergibst this.ancor als node
    public int countElem_rec(ListNodeSL node, int key){
    
            if(current.getNext()!=null)
                  return 0;
    
            if(key==current.getKey())
                  return 1;
            else
                  int counter = 1;
                  return counter += countElem_rec(current.getNext(), key);
    }
    


  • @curry-king:
    Müsste es in Zeile 4 nicht

    if(current.getNext() == null) {
      return 0;
    }
    

    heißen?



  • @Ravendark
    müsste es, ja. Das kommt davon, wenn man einfach abpinselt 😉


Anmelden zum Antworten