コマンドプロンプト(cmd.exe)Advent Calendar 2015
の 12/4 の記事を読んでおもしろかったので、昼やすみを利用して自分なりに書きなおしてみました。
fibonacci.bat
@echo off
setlocal
set n=%~1
if "%n%" == "" (
>&2 echo %~n0 NUMBER
exit /b 1
)
set /a a=1,b=0,s=0
:BOL
if %n% equ 0 echo 0 & goto :EOF
if %n% equ 1 echo %a% & goto :EOF
set /a n-=1
set /a a=a+b
set /a b=a-b
goto BOL
endlocal
ちなみに
普通に作ってしまうと再帰呼び出しになってしまってアレなので
も書いてみたのですが
fibonacci.bat
@echo off
setlocal
set n=%~1
if "%n%" == "" (
>&2 echo %~n0 NUMBER
exit /b 1
)
call :fibonacci %n%
echo %ERRORLEVEL%
exit /b 0
endlocal
goto :EOF
:fibonacci
setlocal
set n=%~1
if %n% equ 0 exit /b 0
if %n% equ 1 exit /b 1
set /a n1=%n%-1
call :fibonacci %n1%
set r1=%ERRORLEVEL%
set /a n2=%n%-2
call :fibonacci %n2%
set r2=%ERRORLEVEL%
set /a r=%r1%+%r2%
exit /b %r%
endlocal
goto :EOF
指定する値が 10 くらいだと数秒で終了しますが、 20 では…(ぜんぜんダメですね)