QBasic教程+教学课件.ppt

  1. 1、本文档共192页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实际上,斐波那契数列中的各项存在如下递推关系: Fn=Fn-1+Fn-2 (n≥3) 这种后项由前面的项按一定的数学关系来求得的方法,叫递推。解决递推问题必须具备两个条件: (1)初始条件; (2)递推关系(或递推公式)。 在上例中,初始条件为:f1=1,f2=1;递推公式为:f3=f2+f1,用f1,f2,f3代表三个数,在每一次循环中它们代表不同的数。在程序运行过程中,这些变量不断地以新值取代原值,这种不断以新值取代原值得操作称为“迭代”。程序中的f1,f2,f3称为迭代变量,它们的值在不断地变化被迭代的。对于递推问题一般可以用迭代方法来处理,但有时不用迭代方法也很简洁。如上面的例子,由于我们知道了它的递推关系,就可以这样来设计程序: 【程序清单】 REM L10-12B DIM f(20) f(1) = 1 f(2) = 1 PRINT f(1), f(2), FOR i = 3 TO 20 f(i) = f(i - 1) + f(i - 2) PRINT f(i), NEXT i PRINT END 求斐波那契数列这种从已知条件出发,逐步推算出要解决的问题的方法叫顺推。如果从问题的结果出发,逐步推算出题目的已知条件,这种递推方法叫做逆推。 【学习任务10】有一堆游戏棒,第一个参加游戏的人取走了一半多一根,第二个游戏者再将剩下的取走一半多一根,以此类推,以后的游戏者均取走前一次剩下的一半多一根,到第10个人来取时,发现只剩下一根了。问:游戏开始前这堆游戏棒共有多少根? 【问题分析】 平时,我们比较习惯用顺推的方法来解决问题,但对本题类型的问题,不妨用反向思维来考虑。根据题意: 第10个人来取时 有1根, 推定第9个人来取时 有4根, 即(1+1)*2 推定第8个人来取时 有10根, 即(4+1)*2 推定第7个人来取时 有22根, 即(10+1)*2 推定第6个人来取时 有46根, 即(22+1)*2 推定第5个人来取时 有94根, 即(46+1)*2 推定第4个人来取时 有190根,即(97+1)*2 推定第3个人来取时 有382根,即(190+1)*2 推定第2个人来取时 有766根,即(382+1)*2 推定第1个人来取时 有1534根,即(766+1)*2 根据以上的推导过程,可以设计出这样的算法: (0)将1赋给S作为初值,S是迭代变量; (1)通过循环完成逆推的过程,迭代公式(S+1)*2,其中S是在不断变化的; (2)输出9遍循环后的S值。 【程序清单】 REM L10_13A S = 1 FOR I = 9 TO 1 STEP -1 S = (S + 1) * 2 NEXT I PRINT "S=";S END 【运行结果】 S=1534 我们是否也可以采用顺推的方法来解决?我们还是先来分析一下: 设S为总游戏捧数,A为每次取走后的所剩游戏棒数。让S从0开始进行搜索,每次逐步递增1,直到找出经过9次取游戏棒后剩下的游戏捧数为1时结束。 每次取走游戏棒数为A/2+1 每次取走后的剩下的游戏棒数为A-(A/2+1),于是得出递推公式为: A=A-A/2-1 取9次后剩下的游戏棒数A=1就终止。这时的S应该是最初的总游戏棒数。 因此在上述的内循环外,还要有一个外循环来给S计数,当S计数的值满足按条件取9次后剩下A=l为止。 S的初值可以取0,终值到底取多少为好是个未知数,所以不能用计数循环,只能用条件循环,直到满足A=1终止。 特别要注意的:在这个条件循环中用S=S+1来为S计数,决不能再用S作为迭代变量。应该用 A来作迭代变量,每次在操作内循环之前,把S赋给A。由此可见,同一问题的顺推与逆推除了递推公式不同外,迭代变量也有所改变。 【程序清单】 REM L10_13B S = 0 DO S = S + 1: A = S FOR I = 1 TO 9 A = A - A / 2 - 1 NEXT I LOOP UNTIL A = 1 PRINT "S=";S END 上面分别介绍了两种递推方法:顺推和逆推。无论是哪一种递推方法,最关键的是要找到递推公式。只要找到了递推公式,程序就很容易实现。 【学习任务11】数列问题:有一数列 A(N)的前几项为0,1,2,6,16,44,120,328,…,已知后一项和前两项有某种关系,试编程求出前N项的和,并将这N个

文档评论(0)

1527177 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档