Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   VB: Stapelspeicher voll bei Rekursion (https://www.delphipraxis.net/44409-vbulletin-stapelspeicher-voll-bei-rekursion.html)

glkgereon 19. Apr 2005 08:07


VB: Stapelspeicher voll bei Rekursion
 
hi

ja ich weiss, ich bin auch nicht so vin VisualBasic überzeugt, aber da ich wirklich nichts anderes da hab habe ich versucht ein paar kleine Makros für Excel zu schreiben. So Primfaktorzerlegung, Fibonacci, das ganze programm halt.

nun habe ich versucht die Primfaktorzerlegung Rekursiv zu implementieren.

leider kommt immer der fehler 26: Stapelspeicher voll.

mein code:

Code:
Public Function Prim_Recursion(zahl As Long, faktor As Long, zeile As Long) As Integer
    If zahl > 0 Then
        If zahl Mod faktor = 0 Then
            Tabelle1.Cells(zeile, 2) = faktor
            zahl = Round(zahl / faktor)
            Tabelle1.Cells(zeile, 3) = zahl
            Prim_Recursion = Prim_Recursion(zahl, faktor, zeile + 1)
        Else
            Prim_Recursion = Prim_Recursion(zahl, faktor + 1, zeile)
        End If
    End If
End Function

Sub PrimRec()
    Tabelle1.Cells(2, 1) = Prim_Recursion(Tabelle1.Cells(1, 1), 2, 1)
End Sub
warum?

das kommt auch wenn in (1,1) 12 steht.

das ergebnis wird (ganz nebenbei) völlig korrekt angezeigt.
auch mit größeren zahlen und mehr faktoren funzt es (zb 1024)
habe ich irgendwas übersehen, wo es sich "zum handkoffer" rekursiert (oder so..)?

mfg gereon

[edit=sakura] [Klammern ersetzt] Mfg, sakura[/edit]

glkgereon 19. Apr 2005 08:10

Re: VB: Stapelspeicher voll bei Rekursion
 
AAARGGHHH

sry für den post, hab den fehler...

der letzte faktor ist natürlich 1, und nicht 0 :wall: :wall: :wall:

ich poste nochmal den korrekten code:

Code:
Public Function Prim_Recursion(zahl As Long, faktor As Long, zeile As Long) As Integer
    If zahl > 1 Then
        If zahl Mod faktor = 0 Then
            Tabelle1.Cells(zeile, 2) = faktor
            zahl = Round(zahl / faktor)
            Tabelle1.Cells(zeile, 3) = zahl
            Prim_Recursion = Prim_Recursion(zahl, faktor, zeile + 1) + 1
        Else
            Prim_Recursion = Prim_Recursion(zahl, faktor + 1, zeile)
        End If
    End If
End Function

Sub PrimRec()
    Tabelle1.Cells(2, 1) = Prim_Recursion(Tabelle1.Cells(1, 1), 2, 1)
End Sub
@sakura: hatte ich doch :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz