php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.04.2005, 10:11  
Erfahrener Benutzer
 
Registriert seit: 30.01.2005
Beiträge: 435
Jojo1
Standard Rekursive Funktionen

Hallo ich hab nicht wirklich ein Problem sondern eine Frage:
Ich hab ein Buch, da bin ich jetz bei rekursiven Funktionen.
Ich blick das jetz nicht ganz.
Also ich kanns ... Halb nachvollziehen ^^
Ich habs mal abgetippt.
PHP-Code:
<?php
function fak($n) {
echo 
"Eintritt mit $n
"
;
if (
$n == 0) {
return 
1;
}
else {
ergebnis $n*fak($n-1);
//Rücksprung
echo "Austritt mit $n: $ergebnis
"
;
return 
$ergebnis;
}
}
fak(4);
/*
Ausgabe
Eintritt mit 4
Eintritt mit 3
Eintritt mit 2
Eintritt mit 1
Eintritt mit 0
Austritt mit 1: 1
Austritt mit 2: 2
Austritt mit 3: 6
Austritt mit 4: 24
*/
?>
echo "Austritt mit $n: $ergebnis
";
Ich blick nicht, warum die Zeile nach 5 mal aufgerufen wird ...
Bis dahin is ja alles klar, wird ja immer $n-1 genommen.
Aber warum es dann nach der 0 nicht mehr zurückspringt sondern
dieses hier aufruft:
PHP-Code:
<?php
echo "Austritt mit $n: $ergebnis
"
;
return 
$ergebnis;
?>
das versteh ich nicht xD
Wär nett, wenn mit jemand mal erklärt, was das soll

editiert: klammer vergessen und fak(4);
Jojo1 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.04.2005, 11:37  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Ordne bitte mal Deine Sätze etwas lesbarer...

Zitat:
Ich blick nicht, warum die Zeile nach 5 mal aufgerufen wird ...
Welche "Zeile nach" wird 5 mal aufgerufen?

Zitat:
Aber warum es dann nach der 0 nicht mehr zurückspringt sondern
dieses hier aufruft:
PHP-Code:
<?php
echo "Austritt mit $n: $ergebnis
"
;
return 
$ergebnis;
?>
das versteh ich nicht xD
Wo springt er "nicht zurück?

Für die 0 führt er die genannte Zeile gerade nicht aus. Da steht ja auch keine Ausgabe "Austritt mit 0: 1
".
Somit ist er bei "return 1;" sofort aus der Funktion zurückgekehrt, wie es ja auch sein soll.

Ich verstehe Dein Problem also nicht so ganz.

Edit:
Irgendwo fehlt da noch eine schließende geschweifte Klammer.
Entweder für die Funktion oder für den Else-Zweig.
Zeig mal, wo die bei Dir drin ist.
Der_Gerhard ist offline  
Alt 24.04.2005, 14:25  
Erfahrener Benutzer
 
Registriert seit: 30.01.2005
Beiträge: 435
Jojo1
Standard

Zitat:
Welche "Zeile nach" wird 5 mal aufgerufen?
dadrüber hatte ich die zeile doch genau dadrüber gepostet .... omg

Zitat:
Edit:
Irgendwo fehlt da noch eine schließende geschweifte Klammer.
Entweder für die Funktion oder für den Else-Zweig.
Zeig mal, wo die bei Dir drin ist.
habs zuerst in ne txtdatei geschrieben und beim kopieren wohl vergessen
ist editiert.

Zitat:
Ich verstehe Dein Problem also nicht so ganz.
warum nach 0 dann plötzlich Austritt mit 1 kommt ...
Ich versteh das WARUM nicht
beim "runterzählen" hatten wir doch schoneinmal 1 (4, 3, 2 ,1)
warum macht die 1 diesmal was anderes? Davor kam ja Eintritt mit ...

edit: dass 1 kommt is klar bei return 1; ..
Jojo1 ist offline  
Alt 24.04.2005, 14:41  
Gast
 
Beiträge: n/a
Standard

ich weiss nicht was dein problem ist aber ist es vielleicht diese lösung ?

PHP-Code:
<?php
function fak($n) {
echo 
"Eintritt mit $n
"
;
if (
$n == 0) {
    echo 
"Austritt mit $n: $ergebnis 1
"
;
    return 
1;
}
else {

$ergebnis $n*fak($n-1);
//Rücksprung
echo "Austritt mit $n: $ergebnis
"
;
return 
$ergebnis;
}
}
fak(4);
?>
 
Alt 24.04.2005, 14:43  
Erfahrener Benutzer
 
Registriert seit: 30.01.2005
Beiträge: 435
Jojo1
Standard

Zitat:
Zitat von 5h4d3
ich weiss nicht was dein problem ist aber ist es vielleicht diese lösung ?

PHP-Code:
<?php
function fak($n) {
echo 
"Eintritt mit $n
"
;
if (
$n == 0) {
    echo 
"Austritt mit $n: $ergebnis 1
"
;
    return 
1;
}
else {

$ergebnis $n*fak($n-1);
//Rücksprung
echo "Austritt mit $n: $ergebnis
"
;
return 
$ergebnis;
}
}
fak(4);
?>
ne ich hab das problem, dass ich das net richtig verstehe o.O
Jojo1 ist offline  
Alt 24.04.2005, 14:57  
Gast
 
Beiträge: n/a
Standard

naja er fängt hier halt bei $n=4 an

wenn $n=4 gibt er den fakultätswert aus und führt sich wieder aus (rekursive funktion)
mit $n*fak($n-1)

wenn nur erreicht ist $n=0 hört er ja auch weil es kein else ist und somit return 1
 
Alt 24.04.2005, 14:59  
Erfahrener Benutzer
 
Registriert seit: 30.01.2005
Beiträge: 435
Jojo1
Standard

ja return 1;
und dann
Eintritt mit 0
Austritt mit 1: 1
Austritt mit 2: 2
Austritt mit 3: 6
Austritt mit 4: 24

hä?
wenns 0 is hört er doch normal auf?
das ist z.B das, was ich net blicke^^
und ich blicke dann nicht, warum er später Austritt mit $n ... macht anstatt eintritt
Jojo1 ist offline  
Alt 24.04.2005, 15:11  
Gast
 
Beiträge: n/a
Standard

achso jetzt verstehe ich. du erwartest diese ausgabe:

Eintritt mit 4
Austritt mit 4: 24
Eintritt mit 3
Austritt mit 3: 6
Eintritt mit 2
Austritt mit 2: 2
Eintritt mit 1
Austritt mit 1: 1
Eintritt mit 0
Austritt mit 0: 1

ich kann dir sagen wieso. weil:

$ergebnis = $n*fak($n-1);

$ergebnis = $n*fak($n-1); -> $n*fak($n-1); -> $n*fak($n-1); ...

du musst dir das als stammbaum so vorstellen:

$ergebnis = - Eintritt mit 4
- Eintritt mit 3
- Eintritt mit 2

und für jeden eintritt, also die funktion die dahinter steckt gibts zuletzt auch einen austritt.

in dieser eintrittszeit arbeiten die funktionen ja noch und die ausgabe erfolgt erst, wenn die funktionen durchgelaufen sind, der reihe nach
 
Alt 24.04.2005, 15:16  
Erfahrener Benutzer
 
Registriert seit: 30.01.2005
Beiträge: 435
Jojo1
Standard

edit:
ich glaub ich habs jetz verstanden^^
er bricht ja nicht ab, wenn es sich selbst aufruft sondern ruft sich nur noch ein paar mal selbst auf und wenn dann 0 errreicht ist is ende.

und dann kommt das mit dem austritt
Jojo1 ist offline  
Alt 24.04.2005, 15:29  
Gast
 
Beiträge: n/a
Standard

nein nur 4321 kannst du nicht erwarten, weil du dir vorstellen musst, das die anderen funktionen ja auch noch mitlaufen und die geben auch ihre returnwerte aus

fak(fak(4));

sowas ähnliches geht auch so führt sich fak(..) aus und in der fak(fak(...)) auch


nochmal versändlich:

wenn du hast: fak(2);

dann wird ausgeführt:

fak(2) fak(1) fak(0)

eintritt mit...
eintritt mit....
eintritt mit...
austritt mit...
autritt mit...
austritt mit...

für jede verschachtelte funktion
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Templatesystem mit Funktionen und Variablen drin? BartTheDevil89 PHP Tipps 2008 6 01.07.2008 09:32
rekursive Funktionen ?? usima PHP Tipps 2008 2 04.05.2008 11:25
welche funktionen deaktivieren brian johnson PHP-Fortgeschrittene 4 15.11.2007 09:25
public, protected, private Funktionen ecomeback PHP Tipps 2007 10 21.08.2007 02:21
Klassen und externe Funktionen ? ssm PHP-Fortgeschrittene 17 18.07.2007 11:59
eine Variable für alle Funktionen definieren Wing PHP Tipps 2007 16 24.06.2007 21:02
PHP Funktionen immer aufrufen DaniGro PHP-Fortgeschrittene 3 28.08.2006 16:35
Funktionen überprüfen und Grafik Funktionen hans.karl2 PHP Tipps 2006 10 31.07.2006 20:08
Funktionen in Funktionen - ist das gut? Schneckenkind PHP Tipps 2006 23 10.06.2006 13:39
Klassen, Funktionen und Session Fatal Error PHP Tipps 2006 1 15.03.2006 19:05
Globale Variabeln in Funktionen finerip PHP Tipps 2007 3 28.11.2005 16:00
Partnerbörse mit individuellen Funktionen gegen Bezahlung Beitragsarchiv 10 23.03.2005 16:27
Eure Ideen sind gefragt: eigene Funktionen verwalten PHP-Fortgeschrittene 12 17.01.2005 15:00
Funktionen auslagern und auf variablen zugreifen Crypi PHP Tipps 2004 3 14.10.2004 13:43
Funktionen Erklärung TheSkaterFriend PHP Tipps 2004 14 11.06.2004 22:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
rekursive funktionen php, fakultätswert in php, rekursive funktion php, rekursive_funktionen.php, php rekursive funktion fibocci, rekursiv runterzählen, php rekursive funktionen speicherverbrauch, php rekursiv runterzählen, php rekursive runterzählen, php return in rekursion funktioniert nicht, php rekursive funktionen

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:46 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.