在.BAT利用VBS引擎計算斐波那契數列

嘗試處理這兔子問題,主要是測試思路可能,實現在一個.bat檔案內,在不產生附件情況下把batscript+vbscript合併及亙傳變量或傳回值等等;
計算方式事實不太重要,只是覺得用這做例子,兩種script都有loop及有變量傳遞,感覺合適用作測試或做例而己...



'>nul 2>nul&echo off&title Taurus's Fibonacci Testscript
':batloop
'>nul 2>nul&cls
'>nul 2>nul&set/p NUM=In digital *
'>nul 2>nul&for /f "delims=#" %%i in ('call CScript.EXE ""%0"" //Nologo //e:VBScript %NUM%') Do Set Var=%%i
'>nul 2>nul&cls
'>nul 2>nul&echo %NUM% digital = %Var%
'>nul 2>nul&pause>nul
'>nul 2>nul&goto :batloop
str = (WScript.Arguments(0)-1)
a=0
b=1
For i = 0 To str
c=a
a=a+b
b=c
Next
WScript.echo (a)


以及,其實在算法上可以直接取 N*((sqrt(5)+1)/2)的四捨五入數,因我嘗試算過,斐波那契數列數位越大兩值的差越接近(sqrt(5)+1)/2,但數據庫沒函数處理得到這麼大的數位,所以不用字串處理方式始終很快會出現溢位,但想說明的是算法思路不必一定要兩值相加去處理;
下面就算法上做個算式例子,字串處理我沒興趣,所以就直接用CLng函数處理算了

下面加兩個算法例子:

純用VBS以Golden Ratio方式取位例子:
(在46位後開始溢位)

do
str = (digital-3)
a=0
if str > -3 then
a=1
For i = 0 To str
num=a*1.6180339887
a=CLng(num)
Next
end if
digital=InputBox("Num = "& a,"Fibonacci sequence","0")
if digital="" then exit do
loop

純用BATCH以加法方式取位例子:
(亦是到46位)

@echo off&setlocal EnableDelayedExpansion
:loop
cls&set /a a=0,b=1
set /p nub=In digital *
for /l %%a in (1,1,%nub%) do set /a a+=!b!,b=!a!
cls&echo !nub! digital = !a!
pause>nul
goto :loop