递归方法求斐波那契函数FIBN.docx

上传人:b****5 文档编号:29950257 上传时间:2023-08-03 格式:DOCX 页数:12 大小:44.71KB
下载 相关 举报
递归方法求斐波那契函数FIBN.docx_第1页
第1页 / 共12页
递归方法求斐波那契函数FIBN.docx_第2页
第2页 / 共12页
递归方法求斐波那契函数FIBN.docx_第3页
第3页 / 共12页
递归方法求斐波那契函数FIBN.docx_第4页
第4页 / 共12页
递归方法求斐波那契函数FIBN.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

递归方法求斐波那契函数FIBN.docx

《递归方法求斐波那契函数FIBN.docx》由会员分享,可在线阅读,更多相关《递归方法求斐波那契函数FIBN.docx(12页珍藏版)》请在冰豆网上搜索。

递归方法求斐波那契函数FIBN.docx

递归方法求斐波那契函数FIBN

 

《微机原理实践》课程设计报告

 

题目:

递归方法求斐波那契函数FIB(N)

专业:

计算机系

班级:

学号:

指导教师:

胡美娇

 

完成日期:

2013年1月1日

 

一、课程设计目的

1、加深对汇编语言理论和基本知识的理解,掌握DOS和BIOS系统功能调用,掌握运用汇编语言设计具有一定功能的软件的基本方法.

2、通过编写一定规模和难度的程序,进行一次较全面的汇编编程训练,提高分析问题和解决问题的能力

3、提高调试程序的能力

二、课程设计容

递归方法求斐波那契函数FIB(N)

要求:

从键盘输入数N,当N=0,1时,FIB=1;当N>=2时,FIB=FIB(N-1)+FIB(N-2),结果用十进制输出。

要求:

具有友好的交互界面,建立主菜单界面:

'********************DisplayProgram********************

inputnumbern:

theFIBN=

三、课程设计过程

1、算法设计(画出算法流程图)

2、程序代码清单

 DATASEGMENT

  NUMDW?

  GRADEDW2(?

 MESS1DB,0AH,0DH,,0AH,0DH,'***DisplayProgram***'

MESS2DB,0AH,0DH,'INPUTNUMBERN:

$',0AH,0DH,

  MESS3DB0AH,0DH,'FIB(N)=$'

  MESS4DB'INPUTERROR!

$'

MESS5DB,0AH,0DH,'INPUTNUMBERN:

'

DB0AH,0DH,'N=$'

  DATAENDS

  PROGNAMSEGMENT

  MAINPROCFAR;主程序入口

  ASSUMECS:

PROGNAM,DS:

DATA

  START:

  

  PUSHDS

  SUBAX,AX

  PUSHAX

  MOVAX,DATA

  MOVDS,AX

LEADX,MESS1

MOVAH,09

INT21H

L1:

LEADX,MESS5

MOVAH,09

INT21H

  MOVBX,0;显示欢迎主界面

  

  

  NEWCHAR:

  MOVAH,01H;键盘输入,每个数据以回车结束

  INT21H

  CMPAL,13

  JELEE01

  SUBAL,30H;转移

  JLERROR

  CMPAL,9D;AL中的数与取来的数据比较

  JGERROR

  CBW

  XCHGAX,BX;交换指令

  MOVCX,10D

  MULCX

  XCHGAX,BX

  ADDBX,AX

  JMPNEWCHAR;无条件跳转

  

  ERROR:

  LEADX,MESS4

  MOVAH,09

  INT21H;中断

JMPL1

RET

  LEE01:

  MOVNUM,BX

  MOVSI,0

  MOVAX,0

  CALLFIB(N);段直接过程调用

  LEADX,MESS3

  MOVAH,09

  INT21H

  PUSHBX;将相关信息压入栈里

  PUSHCX

  PUSHSI

  PUSHDI

  MOVBX,GRADE[SI]

  MOVCX,10000D

  CALLDEC_DIV

  MOVCX,1000D

  CALLDEC_DIV

  MOVCX,100D

  CALLDEC_DIV

  MOVCX,10D

  CALLDEC_DIV

  MOVCX,1D

  CALLDEC_DIV

  POPDI

  POPSI

  POPCX;将相关信息弹出栈

  POPBX 

JMPL1

RET

  MAINENDP

  

  

  

  DEC_DIVPROCNEAR

  MOVAX,BX

  MOVDX,0

  DIVCX

  MOVBX,DX

  MOVDL,AL   ;结果要放在dl中

  ADDDL,30H

  MOVAH,02H

  INT21H

  RET

  DEC_DIVENDP

 FIB(N)PROCNEAR

  CMPNUM,0;num为0转到L2

  JELEE02

  CMPNUM,1;num自减1

  JELEE02

  DECNUM

  CALLFIB(N)

  MOVAX,GRADE[SI]

  MOVBX,GRADE[SI-2]

  MOVGRADE[SI-2],AX

  ADDAX,BX;进行加法运算

  MOVGRADE[SI],AX

  JMPLEE03

  LEE02:

  MOVGRADE[SI],1

  ADDSI,2

  MOVGRADE[SI],1

  LEE03:

RET

  FIB(N)ENDP

  PROGNAMENDS

  ENDSTART

3、调试过程(包括实验过程中实验步骤,出现的问题,解决的方法,使用的实验数据等)

步骤:

首先是先对递归函数的了解,然后分成三种情况,一种是输入的是0和1的情况,一种是输入的是其他数字,最后一种是输入的不是数字,最后对各种情况进行设计。

出现的问题:

刚开始只能输入单个字符,一输入一个数字就开始进行判断

解决的方法:

后面采用了用回车键来判断一段数据输入完毕

使用的实验数据:

本函数所使用的数据都为数字

4、系统运行结果截图

欢迎主界面

运行及结果

5、结果分析

用一组数据来检测程序是否正确

NUM=0时输出FIB(N)=1

NUM=1时输出FIB(N)=1

NUM=30时输出FIB(N)=35549

NUM=A时输出INPUTERROR!

NUM=$时输出INPUTERROR!

经过计算以上结果都是正确的,所以程序是正确的

四、课程设计体会

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,同时,在老师的身上我学得到很多实用的知识,在次我表示感!

同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1