Schrift
[thread]7270[/thread]

Deep recursion



<< |< 1 2 >| >> 18 Einträge, 2 Seiten
pktm
 2005-09-13 03:33
#57846 #57846
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Ich habe ein Programm geschrieben, dass mir endlos eine Aufgabe erfüllen soll.
Das mache ich, indem ich nach Abschluss der Aufgabe, welche in einer Methode steht, diese einfach nochmal aufrufe.

Dann beschwert sich nach einiger Ziet (zurecht denke ich mal) Perl, von wegen "Deep recursion in Methode..."

Gibt es da einen besseren oder schöneren Weg so etwas zu realisieren?
Nach Möglichkeit nicht gleich mit POE :-D
Also am besten recht einfach gehalten.

Grüße, pktm\n\n

<!--EDIT|pktm|1126568138-->
http://www.intergastro-service.de (mein erstes CMS :) )
esskar
 2005-09-13 03:55
#57847 #57847
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
angenohmen deine methode, die du rekursiv aufrufst, heißt foo, dann geht es so

Code: (dl )
1
2
3
while(1) {
foo();
}


und foo braucht sich nicht mehr selbst aufzurufen
pktm
 2005-09-13 22:11
#57848 #57848
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hm, ok. Für meine Programme ohne GUI geht das. Aber wie ist das bei Tk?
Einen Timer kann ich nicht nehmen, weil der nicht wartet, bis die Sache fertig ist.
Kann ich einfach in der while das MainWindow refresh()en?
Werde mal etwas herum spielen...
http://www.intergastro-service.de (mein erstes CMS :) )
Strat
 2005-09-13 22:40
#57849 #57849
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
vielleicht hilft einer der folgenden wege:
1. die Mainloop in die einzelnen bestandteile zerlegen und selbst aufrufen, und dort drinnen noch foo() einbauen
2. wenn foo() keine direkte interaktion mit der GUI benoetigt, kannst du auch mal versuchen, foo() while 1; als thread laufen zu lassen. die kommunikation muesste halt ueber ein(ig)e shared variable(n) gehen... (Tk ist naemlich (noch?) nicht threadsafe)\n\n

<!--EDIT|Strat|1126636943-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
[E|B]
 2005-09-13 23:21
#57850 #57850
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Quote
Dann beschwert sich nach einiger Ziet (zurecht denke ich mal) Perl, von wegen "Deep recursion in Methode..."


Ich nehme an, dass du ein Programm unendlich lang rekursiv laufen lassen willst. Das wird nicht funktionieren, weil Perl eine maximale Rekursionstiefe festsetzt.
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
esskar
 2005-09-13 23:46
#57851 #57851
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[E|B
,13.09.2005, 21:21]Ich nehme an, dass du ein Programm unendlich lang rekursiv laufen lassen willst. Das wird nicht funktionieren, weil Perl eine maximale Rekursionstiefe festsetzt.

aber da wir ja alle wissen, dass man jeden rekursiven algorithmus auf ein nicht rekursiven algorithmus zurückführen kann, kann es funktionieren
pq
 2005-09-14 00:05
#57852 #57852
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[E|B
,13.09.2005, 21:21]Ich nehme an, dass du ein Programm unendlich lang rekursiv laufen lassen willst. Das wird nicht funktionieren, weil Perl eine maximale Rekursionstiefe festsetzt.

so oder so wird man damit irgendwann an die grenzen stossen, bezüglich
speicher. der stack wird immer grösser...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Relais
 2005-09-14 00:23
#57853 #57853
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[E|B
,13.09.2005, 21:21]weil Perl eine maximale Rekursionstiefe festsetzt.

oh behave!

Ähm, ich meine, erzähl mal mehr, davon hatte ich noch nichts gehört, ich kannte bisher nur die Warnung an der 100sten Rekursionsebene.
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
murphy
 2005-09-14 00:25
#57854 #57854
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
[quote=pq,13.09.2005, 22:05]
[E|B
,13.09.2005, 21:21]Ich nehme an, dass du ein Programm unendlich lang rekursiv laufen lassen willst. Das wird nicht funktionieren, weil Perl eine maximale Rekursionstiefe festsetzt.

so oder so wird man damit irgendwann an die grenzen stossen, bezüglich
speicher. der stack wird immer grösser...[/quote]
Für unendliche Rekursion gibt's doch immer noch die Variante:
Code: (dl )
1
2
3
4
5
sub blubb {
... mach was ...
@_ = (... setze parameter ...);
goto &blubb;
}

dann wächst der Stack nämlich nicht. Ich finde diese Art des goto Befehles sehr praktisch und vermisse sie des öfteren in C...
When C++ is your hammer, every problem looks like your thumb.
Crian
 2005-09-14 12:22
#57855 #57855
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Für Tk: Ruf doch einfach selbst update auf ab und zu. Das lässt einen Durchlauf der MainLoop machen und dann hast Du wieder die Kontrolle.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2005-09-13 03:33.