132
set N=%1
call fib %N%
echo %RESULT%
exit /b
rem Фибоначчи fib сандарын есептеу атқарымы
if %1 == 1 ( set RESULT=1 exit /b )
if %1 == 2 ( set RESULT=1 exit /b )
rem санды есептейміз N-2 set /a M=%1-2
rem фибоначчи санын шығарамыз, номер N-2 call fib %M%
rem номер N-2 фибоначчи шығарылған санын стекте
сақтаймыз
set /a M=%1-2
set RES%M%=%RESULT%
rem Фибоначчи номер N-1 санын есептеп шығарамыз set /a
M=%1-1 call fib %M%
rem стектен номері N-2 фибоначчи санын шығарамыз, N-1
номерлі фибоначчи санымен қосамыз және нәтижесін RESULT
айнымалысына жазамыз set /a M=%1-2
for /F %%i in ('echo %%RES%M%%%') do set /a RESULT+=%%i
exit /b
Осы орындалу үстіндегі сандық параметрі бар
файлды шақырған
кезде экранға оның факториалына сәйкес келетін сан шығады:
C:\>Fibonacci.bat 8 21
Өкінішке орай рекурсивті шақыртуларды ұйымдастырған кезде
айнымалылардың
мәндері
сақталмайды.
Бұл
мәндер
бағдарламалаушылардың өздерінің ұйымдастыруларына алып келеді.
Сол себепті жоғарыда көрсетілген мысал Фибоначчи сандарын
классикалық үлгіде орындаудан ерекшеленеді.
Мысалда бұдан бұрын алынған аралық нәтижелерді сақтау үшін
айнымалылар стегі ұйымдастырылады (set RES%M% = %RESULT%
команданы). %M% саны стектің ағымдағы деңгейін береді. Одан кейін
команданың шығуын алатын және стектен мәндерді алып тастау үшін
оның айнымалыларын жазатын for операторы қолданылады. Осы
мәндер Фибоначчи сандар есептеуде қолданылады.