Script- Verständnis- Frage



  • Guten Abend,

    im folgenden möchte Ich Euch ein kleines *.c- Script vorstellen, wobei Ich eine Frage zu dessen Funktionsweiße habe.

    #include<stdio.h>
    
    main()
    {
    	printf("%i", f(3, 9));
    
    	system("pause");
    	return 0;
    }
    
    f(unsigned int a, unsigned int b)
    {
    	unsigned int x = 0;
    
    	if(b == 0)
    	{
    		return 1;
    	}
    
    	x = f(a, b / 2);
    	x = x * x;
    	if (b % 2 == 1)
    	{
    		x = x * a;
    	}
    
    	return x;
    }
    

    Hierzu habe Ich dieses ein wenig abgeändert, um die einzelnen Schritte im Sinne der Variablenveränderungen besser verfolgen zu können.
    http://s1.directupload.net/images/111109/wuhmcsb4.png

    Mit dem Aufruf der Funktion f wird x der wert aus f(a, b / 2) zugewießen, die rekursion läuft somit solange bis b = 1 ist und halbiert wird und somit
    dank des Types Integer als 0 gillt (1 / 2 = 0.5). Als nächstes wird x zu x * x, also x = 1 * 1 = 1. Im nächsten Schritt wird, wenn b eine ungerade Zahl ist-
    x = x * a zugewiesen, das heißt x = 1 * 3 = 3. Letztendlich kommt man das erste mal zu 4. (siehe Bild) und mit return x;- wird x (also 3) wiedergegeben.

    Somit kommen wir auch schon zu meiner Frage, meiner Meinung nach müsste nach dem ersten 4., die Funktion ihr entgültiges Ende finden,
    jedoch ist dies nicht so- Waran liegt das, was habe Ich übersehen?

    Vielen Dank für Eure Hilfe und Eure Zeit.

    Mit freundlichen Grüßen,
    Floppy21



  • Probier die Funktion doch mal mit etwas weniger komplexen Ergebnissen aus. Die Funktionen werden aufgerufen und darin wieder eine aufgerufen und kehren dann in umgekehrter Reihenfolge zurück.

    Deine Annahme, dass die Funktion dann also zum ersten Mal zur 4. kommt ist falsch. Denn durh x = f(a, b / 2); wurde die Bedingung if (b % 2 == 1) bereits mehrfach ausgewertet.



  • Hallo,

    "kehren dann in umgekehrter Reihenfolge zurück."- ja, das stimmt, das hatte Ich ganz übersehen, nochmals vielen Dank.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum C (C89 und C99) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten