当前位置: 代码迷 >> 汇编语言 >> 递规程序,不知道哪儿出错了,请大神指出
  详细解决方案

递规程序,不知道哪儿出错了,请大神指出

热度:281   发布时间:2016-05-02 04:53:28.0
递归程序,不知道哪儿出错了,请大神指出
写了一个递归程序,是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

不确定对不对呵呵,一个小思路嘿
  相关解决方案