Procedure

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Komischerweise funktioniert eine Rekursion aber problemlos.

Code: Alles auswählen

a = 10

Gosub TestGosub

Debug a

End

TestGosub:
  a - 1
  If a > 1
    Gosub TestGosub
  EndIf
Return
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Rekursiv? Dann ist es mit Goto ähnlich.

Code: Alles auswählen

a = 10

Gosub TestGosub

Debug a

End

TestGosub:
  Debug a
  a - 1
  If a > 1
    Goto TestGosub
  EndIf
Return
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Die Rekursion mit Prozeduren zeichnet sich dadurch aus, dass du für jeden Prozeduraufruf "frisch" deklarierte Variablen zur Verfügung hast, dir also Werte rückwirkend auf's Einfachste merken kannst. Das a aus deinem Beispiel wird ja durchweg benutzt.
Versucht einmal mit Gosub eine wirklich nützliche rekursive Funktion zu schreiben! Da musst du alle wichtigen Werte selber auf einen Stack legen und verwalten.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

freedimension hat geschrieben:Da musst du alle wichtigen Werte selber auf einen Stack legen und verwalten.
sic! :allright:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Die Zeit, die man durch Gosub (UrBefehl aus den 60-ern) spart, die nächsten 50 Jahre addieren, es wird nicht reichen ne Tasse Kaffee zu trinken :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

im endeffekt ist ja GOSUB nix weiter als ein wrapper des ASM-Befehls JumpToSubroutine...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Was sind dann wohl die anderen PB-Befehle? :mrgreen:
Bild
Win11 Pro 64-Bit, PB_6.11b1
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

die anderen befehle sind mehr oder weniger komplexe ASM-Routinen.

lediglich GOTO und GUSUB entsprechen fast 1:1 ihren ASM-Kollegen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten