回 帖 发 新 帖 刷新版面

主题:fibonacci数列汇编程序急求解!!!

定义如下:
fib(1)=1
fib(2)=1
fib(n)=fib(n-2)+fib(n-1)n>2
要求:
(1)n从键盘任意输入
(2)函数计算后以十进制在屏幕上显示


谢谢!非常。。。

回复列表 (共6个回复)

沙发


;2005-12-16 16:27:26
;定义如下:
;fib(1)=1
;fib(2)=1
;fib(n)=fib(n-2)+fib(n-1)n>2
;要求:
;(1)n从键盘任意输入
;(2)函数计算后以十进制在屏幕上显示

.model small
.data
strBuff    db    0DH, 0AH, 6 dup (?)

.code
_main:
        mov        ax, @data
        mov        ds, ax

        xor        bx, bx
        xor        dx, dx
        mov        cx, 10
    _@0:
        mov        ah, 1
        int        21H
        sub        al, '0'
        jb        _@1
        cmp        al, 9
        ja        _@1
        push    ax
        mov        ax, bx
        mul        cx
        mov        bx, ax
        pop        ax
        xor        ah, ah
        add        bx, ax
        jmp        _@0    
    _@1:
        mov        ax, bx
        push    ax
        call    fib
        add        sp, 2
        
        mov        si, offset strBuff + 2
        call    BinToDecString
        mov        dx, offset strBuff
        mov        ah, 9
        int        21H

        mov        ax, 4C00H
        int        21H

fib        proc
        push    bp
        mov        bp, sp

        mov        ax, [bp + 4]    ;取出参数 n
        cmp        ax, 2
        ja        _@fib_1
        mov        ax, 1
        jmp        _@fib_ret
_@fib_1:
        push    ax

        dec        ax
        push    ax    ;---------------|
        dec        ax    ;                |
        push    ax    ;-------|        |
        call    fib ;-------|        |    fib(n - 1)
        add        sp, 2;                |
        mov        [bp - 2], ax    ;    |
        call    fib ;---------------|    fib(n - 2)
        add        sp, 2
        add        ax, [bp - 2]
        
_@fib_ret:
        mov        sp, bp
        pop        bp
        ret
fib        endp

;****************************************************
;BinToDecString
;功能:
;    机器数转换为十进制字符串
;入口参数:
;    AX 存放机器数
;    SI 存放要转换后的字符串的地址
;****************************************************
BinToDecString    proc
            push    dx
            push    cx
            cld

            mov        cx, 10
_@BinToDecString_1:
            xor        dx, dx
            div        cx        ;除以 10
            push    ax        ;暂时保存商
            mov        al, dl
            add        al, '0' ;余数加 '0'
            mov        byte ptr [si], al
            inc        si
            pop        ax        ;弹出商
            test    ax, ax
            jnz        _@BinToDecString_1
            
            mov        byte ptr [si], '$'
            pop        cx
            pop        bx
            ret
BinToDecString    endp
end    _main

板凳

main()
{int i;int f[20]={1,1};
for(i=2;i<=20;i++)
  f[i]=f[i-2]+f[i-1];
for(i=0;i<20;i++)
  {if(i%5==0)printf("\n");
   printf("%12d",f[i]);
   }
  }

3 楼

哇,会出现溢出。。。

4 楼

lz的程序似乎有点问题……还没有学到函数这个地方,但是执行发现结果不正确

5 楼

main()
 { int n;
   int s=0;
   s=f(n);
   int f(int m)
     {
       if(m<=2) return 1
       else return f(m-1)+f(m-2);
     }

  }

6 楼

main()
 { int n;
   print("please input a number :");
   scanf("%d",%n);
   int s=0;
   s=f(n);
   print("%d",s);
   int f(int m)
     {
       if(m<=2) return 1
       else return f(m-1)+f(m-2);
     }

  }
 

我来回复

您尚未登录,请登录后再回复。点此登录或注册