递归程序,不知道哪儿出错了,请大神指出
写了一个递归程序,是f(n)=(-1)^(n-1)*2f(n-1)+f(n-2),初始值f(0)=2,f(1)=3,试求n=8时f(8)大小,子程序如下,我感觉是堆栈的问题,但是看了一晚都没找出来,很着急,只能求大神帮忙了。
push 8
FX proc near
push bp
mov bp,sp
sub sp,2
push bx
cmp word ptr [bp+4],1
jz lp1
cmp word ptr [bp+4],0
jz lp2
mov bx,[bp+4]
dec bx
push bx
call FX
mov ax,[bp-4]
shl ax,1
dec bx
push bx
call FX
mov cx,bx
and cl,1
cmp cl,0
jz even
add ax,[bp-4]
jmp bye
even:mov cx,[bp-4]
sub cx,ax
mov ax,cx
jmp bye
lp1: mov ax,3
push ax
jmp bye
lp2: mov ax,2
push ax
bye: pop bx
mov sp,bp
pop bp
ret 2
FX endp
递归 栈
[解决办法]
mov bp,sp
sub sp,2
push bx ;这句有什么用啊
感觉你这个程序逻辑有问题,push 1没问题 push 2好像是死循环。
[解决办法]
感觉写的有点乱哈,学过汇编不过也不是很好……我觉得这样应该也行吧……
PUSH 8
FX PROC NEAR
PUSH BP
MOV BP, SP
PUSH DX
PUSH CX
MOV CX, [BP+4]
CMP CX, 1
JE f1
……
用AX,BX储存f(1),f(0)
……
f1:MOV DX, CX
DEC DX
PUSH DX
CALL FX
……
实现 f(k)=(-1)^(k-1)*2f(k-1)+f(k-2)
然后将f(k),f(k-1)储存在AX,BX中
……
f2:POP CX
POP DX
POP BP
RET
FX ENDP