易语言使用递推法计算斐波那契数列
斐波那契数列为:0,1,1,2,3,5,8.......,即:当前项等于它前面两项的和。求出有限位数个斐波那契数列并显示出来。
求数列子程序(0)=0
求数列子程序(1)=1
求数列子程序(n)=求数列子程序(n-2)+求数列子程序(n-1)
通过上面规律可以推导出结果。
递推法是利用问题本身具有的递推关系求问题解的一种方法。
设要求问题的规模为N的解,当N=1时,解或为已知,或能很方便地得到解。
能采用递推法构造算法的问题有重要的递推性质,即当得到问题规模为i-1的解后,有问题的递推性质,能从已求得的规模为1,2,......,i-1的一系列解,构造出问题规模为i的解。
这样程序可以从i=0或i=1出发,重复地,由一直至i-1规模的解,通过递推,获得规模为i的解,直至规模为N的解。
xxx
.版本 2 .支持库 eCalc .子程序 递推求数列子程序, 大数, , 根据给定的位置参数求出与位置相对应的数值 .参数 数列相应位置, 整数型, , 本次要计算的数在数列中的位置 .局部变量 临时大数, 大数, , , 定义数组第一位和第二位数字数值的变量 .局部变量 结果大数, 大数, , , 存储两数相加得到的结果 .如果真 (数列相应位置 = 0) ' 如果是数列第一位数则返回0 临时大数.导入数字 (0) 返回 (临时大数) .如果真结束 .如果真 (数列相应位置 = 1) ' 如果是数列第二个数则返回1 临时大数.导入数字 (1) 返回 (临时大数) .如果真结束 ' 如果是第二位以后的数则等于它的前两位的和 结果大数 = 数列存储数组 [数列相应位置 - 1].加 (数列存储数组 [数列相应位置]) 返回 (结果大数)
计算
窗口放置一个编辑框,输入计算的位数,一个超级列表框用来显示结果。
.版本 2 .支持库 eCalc .支持库 iext .子程序 _计算图形按钮_被单击 .局部变量 局部计次变量, 整数型, , , 几次循环中记录循环次数的变量 .局部变量 求得的数, 大数, , , 存储本次计算得到的数 .局部变量 项目索引, 整数型 显示超级列表框.全部删除 () ' 清空上一次查找的内容 清除数组 (数列存储数组) 输入的数列位数 = 到数值 (输入编辑框.内容) ' 获取要查找多少位 .如果真 (输入的数列位数 > 10000) .如果真 (信息框 (“您输入的数值过大,处理数据时程序将会有一段时间无响应,是否继续?”, #是否钮 + #询问图标, “请问:”) ≠ #是钮) ' 如果不想等待很长时间则返回 返回 () .如果真结束 .如果真结束 .如果真 (输入的数列位数 < 0) ' 只能输入正整数 输入编辑框.内容 = “” 返回 () .如果真结束 .计次循环首 (输入的数列位数, 局部计次变量) ' 依次求出每位数按顺序加入数组 求得的数 = 递推求数列子程序 (局部计次变量 - 1) 加入成员 (数列存储数组, 求得的数) .计次循环尾 () .计次循环首 (取数组成员数 (数列存储数组), 局部计次变量) ' 把求出的所有数在编辑框中显示出来 项目索引 = 显示超级列表框.插入表项 (, “第” + 到文本 (局部计次变量) + “个数是:”, , , , ) 显示超级列表框.置标题 (项目索引, 1, 数列存储数组 [局部计次变量].导出文本 ()) .计次循环尾 ()