Как создать стек для рекурсивной функции? - VB

Узнай цену своей работы

Формулировка задачи:

Здесь речь идёт вот о чем. Требуется сделать стек, размер которого будет на порядок больше того, что может дать VB6. И основная проблема даже не в том как управлять этим стеком, а в том, что в него заносить, какие данные? Буду вам очень благодарен если вы приведёте маленький пример. Например надо вычислить 7!. И прокомментировать код. Все остальное я сделаю сам. Мне важно понять принцип. Принцип вызова рекурсивной функции и сохранение в стеке необходимых данных.
В качестве стека я собираюсь использовать файл прямого (произвольного) доступа нужного мне размера.

Решение задачи: «Как создать стек для рекурсивной функции?»

textual
Листинг программы
Global StackAddr
 
EnableASM
 
Macro GetStackAddr(Var)
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
    MOV Var, esp  ; x86.
  CompilerElse
    MOV Var, rsp  ; x64.
  CompilerEndIf
EndMacro
 
Procedure Tst(i)
  If i<10      ; Прервать рекурсию если ее глубина равна 10.
    Tst(i+1)
  ElseIf i=10
    GetStackAddr(i) ; Копирование текущего адреса стека в переменную.
    MessageRequester("", "Было использовано "+Str(StackAddr-i)+" байт стека")
  EndIf
EndProcedure
 
 
GetStackAddr(StackAddr) ; Копирование текущего адреса стека в переменную.
Tst(0)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы