Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

Rekursion

Diskussion: Rekursion im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Ich habe da ein php-Problem: Es geht um diese Aufgabe: http://projecteuler.net/index.php?se...problems&id=15 Weil mein Programm leider nicht funktioniert habe. Ich ...

Antwort
Alt 18.12.08, 16:40   #1 (permalink)
 
Benutzerbild von Stein
 
Registriert seit: 10.10.05
Stein Leistung: Facit NTK
Stein eine Nachricht über ICQ schicken
Likes: 0
Standard Rekursion

Anzeige

Ich habe da ein php-Problem:
Es geht um diese Aufgabe:
http://projecteuler.net/index.php?se...problems&id=15

Weil mein Programm leider nicht funktioniert habe. Ich es erstmal mit einen 1x1 Kasten versucht:

PHP-Code:
<?php
function find($xkord$ykord$groesse)
{    
    global 
$number;
    if(
$xkord $groesse){
        echo 
"<tr><td>"$xkord ."</td><td>".$ykord."</td><td>".$number."</td></tr>";
        
find($xkord 1$ykord$groesse);
    }
    if(
$ykord $groesse){
        echo 
"<tr><td>"$xkord ."</td><td>".$ykord."</td><td>".$number."</td></tr>";    
        
find($xkord$ykord 1$groesse);
    }
    if(
$xkord $groesse and $ykord $groesse){
        
$number++;
        echo 
"<tr><td><b>"$xkord ."</b></td><td><b>".$ykord."</b></td><td><b>".$number."</b></td></tr>";    
    }

}
echo 
'<html><table border="1"><tr><th>X-Kord</th><th>Y-Kord</th><th>Anzahl</th></tr>';

$number 0;
find(0,0,1);



echo 
'</table></html>';

?>
Ich habe die Ausgabe so detailiert gemacht damit ich sehe wo der Fehler ist. Wer sicher die ausgabe mal ansehen will: http://waba.bplaced.net/ways.php Eigentlich läuft ja alles richtig, aber warum wird nachdem das Programm 1x nach rechts und einmal nach unten ist der Zähler doppelt(bzw. beim 2. mal 3-fach) um erhöht?

wenn es ins Code-Kitchen gehört bitte verschieben
__________________
Steinhagelvoll
Stein ist offline   Mit Zitat antworten
Alt 18.12.08, 16:44   #2 (permalink)
Senior Member
 
Benutzerbild von odigo
 
Registriert seit: 25.12.04
odigo Leistung: 8086odigo Leistung: 8086
odigo eine Nachricht über ICQ schicken
Likes: 54
Standard

Code:
$xkord = $groesse
= ist ein Zuweisungsoperator und kein Vergleichsoperator. Nimm ==



Gruß odigo
odigo ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 18.12.08, 16:53   #3 (permalink)
Themenstarter
 
Benutzerbild von Stein
 
Registriert seit: 10.10.05
Stein Leistung: Facit NTK
Stein eine Nachricht über ICQ schicken
Likes: 0
Standard

oh meine Gott ist das peinlich. Was es auch immer so dumme Bugs sein müssen die man nie findet. Zu meiner Verteidigung: Ich muss in der Schule immer Pascal nehmen.
__________________
Steinhagelvoll
Stein ist offline   Mit Zitat antworten
Alt 18.12.08, 18:29   #4 (permalink)
Member of Honour
 
Benutzerbild von easteregg
 
Registriert seit: 14.09.07
easteregg Leistung: Pentium Ieasteregg Leistung: Pentium I
easteregg eine Nachricht über ICQ schicken
Likes: 62
Standard

ich bin lustigerweise auch grad bei dem problem und hatte an sich den gleichen ansatz!
aber durch die rekursion explodiert bei nem 20x20 feld die zeit der berechnung.

aber wie man das optimieren kann, habsch keinen plan!
__________________
» Flattr mich! - Wenn dir mein Beitrag geholfen hat! «
<| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |>
easteregg ist offline   Mit Zitat antworten
Alt 18.12.08, 20:18   #5 (permalink)
Senior Member
 
Registriert seit: 03.09.05
Lesco Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von easteregg
ich bin lustigerweise auch grad bei dem problem und hatte an sich den gleichen ansatz!
aber durch die rekursion explodiert bei nem 20x20 feld die zeit der berechnung.

aber wie man das optimieren kann, habsch keinen plan!
Kleiner Tipp: Es gibt ein bestimmtes Untergebiet der Stochastik, mit dem man derartige Probleme beschreiben/lösen kann. Dann reicht sogar ein Taschenrechner.
Lesco ist offline   Mit Zitat antworten
Alt 18.12.08, 20:22   #6 (permalink)
Themenstarter
 
Benutzerbild von Stein
 
Registriert seit: 10.10.05
Stein Leistung: Facit NTK
Stein eine Nachricht über ICQ schicken
Likes: 0
Standard

Ich versuch gleich mal ob man aus den 1. 10 werten nicht ne Formel bastel kann
__________________
Steinhagelvoll
Stein ist offline   Mit Zitat antworten
Alt 18.12.08, 20:36   #7 (permalink)
Member of Honour
 
Benutzerbild von easteregg
 
Registriert seit: 14.09.07
easteregg Leistung: Pentium Ieasteregg Leistung: Pentium I
easteregg eine Nachricht über ICQ schicken
Likes: 62
Standard

Zitat:
Original von Lesco
Zitat:
Original von easteregg
ich bin lustigerweise auch grad bei dem problem und hatte an sich den gleichen ansatz!
aber durch die rekursion explodiert bei nem 20x20 feld die zeit der berechnung.

aber wie man das optimieren kann, habsch keinen plan!
Kleiner Tipp: Es gibt ein bestimmtes Untergebiet der Stochastik, mit dem man derartige Probleme beschreiben/lösen kann. Dann reicht sogar ein Taschenrechner.
uh, in dem bestimmten untergebiet war ich extrem schlecht, aber danke für den tipp!
ich such mal rum!
__________________
» Flattr mich! - Wenn dir mein Beitrag geholfen hat! «
<| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |>
easteregg ist offline   Mit Zitat antworten
Alt 18.12.08, 20:40   #8 (permalink)
Lep
 
Registriert seit: 15.10.08
Lep Leistung: Facit NTK
Likes: 0
Standard

Wenns um Rekursion geht so nehme man LISP, Scheme oder ne ML-Sprache wie OCaml
Lep ist offline   Mit Zitat antworten
Alt 18.12.08, 20:48   #9 (permalink)
Member of Honour
 
Benutzerbild von easteregg
 
Registriert seit: 14.09.07
easteregg Leistung: Pentium Ieasteregg Leistung: Pentium I
easteregg eine Nachricht über ICQ schicken
Likes: 62
Standard

mit welchem hintergrund?
wenns einfach zum komplex wird, bringt doch die andere sprache auch nichts?
oder gibts da in lisp irgendwleche tollen features die das beschleunigen?
__________________
» Flattr mich! - Wenn dir mein Beitrag geholfen hat! «
<| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |>
easteregg ist offline   Mit Zitat antworten
Alt 18.12.08, 21:21   #10 (permalink)
Senior Member
 
Registriert seit: 29.07.05
Heinzelotto Leistung: Facit NTK
Heinzelotto eine Nachricht über ICQ schicken
Likes: 0
Standard

Zitat:
Original von easteregg
uh, in dem bestimmten untergebiet war ich extrem schlecht, aber danke für den tipp!
ich such mal rum!
noch ein tipp: überleg dir, wie viele schritte du laufen musst, und wie viele davon nach unten (bzw. rechts) gehen.
Heinzelotto ist offline   Mit Zitat antworten
Alt 18.12.08, 21:37   #11 (permalink)
mu_
 
Registriert seit: 01.12.08
mu_ Leistung: Facit NTK
Likes: 0
Standard

Code:
(define (countWays x y)
  (cond [(or (= x 0) (= y 0)) 1]
        [else (+ (countWays x (- y 1)) (countWays (- x 1) y))]))

(countWays 20 20)
Eine Lösung in Scheme

Allerdings gibt es eine bessere Möglichkeit:
Mathematische Lösung   
countWays M N := (M + N)! / (m!n!)
?!?!LaTeX!?!
mu_ ist offline   Mit Zitat antworten
Alt 19.12.08, 10:45   #12 (permalink)
Senior Member
 
Registriert seit: 03.09.05
Lesco Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von Lep
Wenns um Rekursion geht so nehme man LISP, Scheme oder ne ML-Sprache wie OCaml
Warum sollte Rekursion in anderen Sprachen schlechter verwendbar sein? Natürlich sieht sowas in Haskell/Scheme/Lisp/$FP-Sprache eleganter aus, doch das ist nicht nur bei Rekursion der Fall. Und tail-recursion können mittlerweile sehr viele Compiler(u.a. auch gcc) wegoptimieren.
Lesco ist offline   Mit Zitat antworten
Alt 19.12.08, 13:53   #13 (permalink)
mu_
 
Registriert seit: 01.12.08
mu_ Leistung: Facit NTK
Likes: 0
Standard

Schlechter sein wird es nicht. Allerdings denke ich, dass man sich bei Sprachen, die hauptsächlich mit Rekursion arbeiten ( wie eben z.b. Scheme ), mehr Gedanken über den Abarbeitung des Problems macht ( Aufteilung des Problems in Teilprobleme, Wann ist ein Problem tivial lösbar?, usw.. ), als dass man es bei Sprachen macht, die Schleifen nutzen. Und das führt oft zu besseren Ergebnissen, auch wenn Rekursion letztendlich auch nur Schleifen sind.
Ich will das jetzt nicht verallgemeinern, das kommt natürlich immer auf den Programmierer und seinen Wissensstand an. Rein technisch gesehen gibt es afaik keinen Unterschied bis auf die "Implementierung der Sprache" (dass PHP langsamer als C ist sollte man natürlich wissen ).
mu_ ist offline   Mit Zitat antworten
Alt 19.12.08, 14:12   #14 (permalink)
Member of Honour
 
Benutzerbild von easteregg
 
Registriert seit: 14.09.07
easteregg Leistung: Pentium Ieasteregg Leistung: Pentium I
easteregg eine Nachricht über ICQ schicken
Likes: 62
Standard

nuja, in dem fall ist php ausreichend, da für die probleme bei euler ja eh der algo ausschlaggebend ist.

und ob ich bei soner rekursionstiefe php oder c nutze spielt glaube keine rolle mehr, weil selbst mit c dürfte das in der form nicht in einer kleinen endlichen zeit lösbar sein.
__________________
» Flattr mich! - Wenn dir mein Beitrag geholfen hat! «
<| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |>
easteregg ist offline   Mit Zitat antworten
Alt 19.12.08, 17:51   #15 (permalink)
Senior Member
 
Benutzerbild von t3rr0r.bYt3
 
Registriert seit: 07.01.03
t3rr0r.bYt3 Leistung: Z3
Likes: 19
Standard

OT: Das gleiche Rätsel wurde bei Google Treasure Hunt gestellt.
Spoiler: Es sind immer 20 Schritte rechts und 20 Schritte runter, dabei alle Permutationen? /edit: Vertauschung von 2 gleichgerichteten Schritten natürlich noch wegdividieren.

/edit2: Auf die Gefahr hin, dass ich mich jetzt völlig blamiere, hab ich das mal in SML hingehackt. Viel Spaß beim warten auf die Rekursion

Code:
fun     foo (0, 0)      = 0
|       foo (0, x)      = 1
|       foo (x, 0)      = 1
|       foo (x, y)      = foo (x, y-1) + foo (x-1, y)
/edit3: Produziert ab 17*17 sowieso nen Int-Overflow.
t3rr0r.bYt3 ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » Rekursion
Themen-Optionen
Ansicht

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

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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Kombinationsbildung per Rekursion Ook! Code Kitchen 5 02.11.08 14:27
Rekursion - mal wieder... [editiert] Ook! Code Kitchen 4 13.07.08 15:26
[Diskusion]: Warum überhaupt Rekursion verwenden? _fux_ Code Kitchen 16 06.07.08 08:40
[C++] Fragen zur Rekursion shUnderdog Code Kitchen 3 28.05.07 17:42


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61