主题:fibonacci数列汇编程序急求解!!!
renfenghua
[专家分:30] 发布于 2005-12-15 16:47:00
定义如下:
fib(1)=1
fib(2)=1
fib(n)=fib(n-2)+fib(n-1)n>2
要求:
(1)n从键盘任意输入
(2)函数计算后以十进制在屏幕上显示
谢谢!非常。。。
回复列表 (共6个回复)
沙发
erping [专家分:3660] 发布于 2005-12-16 17:06:00
;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
板凳
09932064546 [专家分:30] 发布于 2005-12-29 17:36:00
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 楼
zlxit520 [专家分:0] 发布于 2006-05-05 02:10:00
哇,会出现溢出。。。
4 楼
FlyerLrt [专家分:10] 发布于 2006-05-06 11:14:00
lz的程序似乎有点问题……还没有学到函数这个地方,但是执行发现结果不正确
5 楼
beau1 [专家分:0] 发布于 2006-05-06 17:40:00
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 楼
beau1 [专家分:0] 发布于 2006-05-06 17:43:00
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);
}
}
我来回复