首先介紹斐波那契數(shù)列,斐波那契數(shù)列的排列是:1,1,2,3,5,8,13,21,34,55,89,144,。。。。。。
創(chuàng)新互聯(lián)建站的客戶來自各行各業(yè),為了共同目標(biāo),我們?cè)诠ぷ魃厦芮信浜?,從?chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對(duì)我們的要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。專業(yè)領(lǐng)域包括做網(wǎng)站、網(wǎng)站設(shè)計(jì)、電商網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺(tái)開發(fā)。
依次類推下去,你會(huì)發(fā)現(xiàn),它后一個(gè)數(shù)等于前面兩個(gè)數(shù)的和。在這個(gè)數(shù)列中的數(shù)字,就被稱為斐波那契數(shù)。2是第3個(gè)斐波那契數(shù)?,F(xiàn)象: 這個(gè)級(jí)數(shù)與大自然植物的關(guān)系極為密切。幾乎所有花朵的花瓣數(shù)都來自這個(gè)級(jí)數(shù)中的一項(xiàng)數(shù)字:菠蘿表皮方塊形鱗苞形成兩組旋向相反的螺線,它們的條數(shù)必須是這個(gè)級(jí)數(shù)中緊鄰的兩個(gè)數(shù)字(如左旋8行,右旋13行);還有向日葵花盤……倘若兩組螺線條數(shù)完全相同,豈不更加嚴(yán)格對(duì)稱?可大自然偏不!直到最近的1993年,人們才對(duì)這個(gè)古老而重要的級(jí)數(shù)給出真正滿意的解釋:此級(jí)數(shù)中任何相鄰的兩個(gè)數(shù),次第相除,其比率都最為接近0.618034……這個(gè)值,它的極限就是所謂的"黃金分割數(shù)"。
給定一個(gè)正整數(shù)n計(jì)算出對(duì)應(yīng)斐波那契數(shù)列對(duì)應(yīng)的值
說明:
用mackbookpro i7 2.7GHZ筆記本進(jìn)行測試,結(jié)果如下:
備注: 當(dāng)n=80時(shí),由于測試等待時(shí)間過長,強(qiáng)制中斷了執(zhí)行。
從測試結(jié)果看出,當(dāng)n逐漸增大,遞歸方式計(jì)算斐波拉契數(shù)列的時(shí)間復(fù)雜性急劇增加。當(dāng)n值較大時(shí)可以考慮用循環(huán)方式代替。
類似的方式也可以用于,求階乘、遍歷目錄、漢諾塔等問題的解決。在后期的文章中,我將這些內(nèi)容進(jìn)行補(bǔ)充,敬請(qǐng)期待,謝謝。
僅供參考吧
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
BUFF DB 10
DB ?
DB 10 DUP(?)
RESULT DW ?
RESULT_SHOW DB 10 DUP(?)
DATA ENDS
CODE SEGMENT
START:
MOV AX,DATA
MOV DS,AX
LEA DX,BUFF
MOV AH,0AH
INT 21H
MOV DI,0
L0: ;統(tǒng)計(jì)一共有多少個(gè)數(shù)字組成
CMP BYTE PTR DS:[DI+2],0DH
JZ GO
INC DI
JMP L0
GO: ;計(jì)算第n個(gè)斐波那契數(shù),把數(shù)字字符串轉(zhuǎn)換為十進(jìn)制數(shù)
MOV BL,10
MOV AX,1
MOV SI,DI ;為后面判斷輸入的是不是只輸入一個(gè)數(shù)有用
MOV CX,DI
L2: PUSH AX
SUB BYTE PTR DS:[DI+1],30H
MUL BYTE PTR DS:[DI+1]
ADD RESULT,AX
POP AX
MUL BL
DEC DI
LOOP L2
;分兩種情況:1.輸入的是1;2.輸入的不是1
CMP SI,1
JNZ L7
CMP BYTE PTR RESULT,1
JNZ L7
MOV AX,RESULT
JZ L4
L7: MOV AX,1
MOV BX,0
MOV CX,RESULT
DEC CX
L3: ;第n個(gè)斐波那契數(shù)存放到AX中
PUSH AX
ADD AX,BX
POP BX
LOOP L3
L4:
;顯示這個(gè)斐波那契數(shù)
MOV DX,0
LEA SI,RESULT_SHOW
MOV DI,0 ;利用DI來累計(jì)一共有多少個(gè)數(shù)字
L5:
MOV CX,10
CALL DIVDW
ADD CL,30H
MOV DS:[SI],CL
CMP AX,0
JZ L6
INC SI
INC DI
JMP L5
L6:
MOV DL,DS:[SI]
MOV AH,2
INT 21H
CMP DI,0
JZ OK
DEC SI
DEC DI
JMP L6
OK:
MOV AX,4C00H
INT 21H
;參數(shù): (AX)=DWORD型低16位數(shù)據(jù)
; (DX)=DWORD型高16位數(shù)據(jù)
; (CX)=除數(shù)
;返回: (DX)=結(jié)果的高16位,(AX)=結(jié)果的低16位
; (CX)=余數(shù)
;32位除16位,可以防止溢出!
DIVDW: ;子程序定義開始,功能是分離各個(gè)數(shù)字出來
PUSH AX
MOV AX,DX
MOV DX,0
DIV CX
MOV BX,AX
POP AX
DIV CX
MOV CX,DX
MOV DX,BX
RET ;子程序定義結(jié)束
CODE ENDS
END START