欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

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

更新时间: 2014-01-05 03:17:43 责任编辑: Author_N1

 

递归程序,不知道哪儿出错了,请大神指出
写了一个递归程序,是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

不确定对不对呵呵,一个小思路嘿
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:17:43
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20495/
本文WWW.DOC100.NET DOC100.NET版权所有。