主题:QB里有没有递归算法?
caocaocao
[专家分:0] 发布于 2005-04-15 18:37:00
QB里有没有递归算法?
如何解汉诺塔问题?[em11]
回复列表 (共5个回复)
沙发
wqbt [专家分:30] 发布于 2005-04-15 18:46:00
QB里有递归的
递推法是组合数学中的一个重要解题方法,许多著名问题用递推法来解显得精巧简捷。递推在程序设计中也有很广泛的应用。今天我们就来看看递推的解题方法。
递推的基本思想是根据已经求得的量,根据某个关系式计算出未知的一个量,直至求出所要求的结果。
用递推法解题,首先是要列出符合题意的递归关系式——递归方程(不明白的朋友可以认为是根据已知量求一个未知量的式子),再解所得方程,直至算出最终结果。
例题:
有一数列:1,2,4,8,16,32,……
编写一程序,用户输入一个数n(n<=30),输出这个数列的第n位。
分析:
经观察,显然每一个数都是前面数的2倍。
设这个数列第n个数是f(n),则可以得到:
/1 [i=1]
f(i)=|
\f(i-1)*2 [1<i<=n]
这个式子的含义是:当i=1时,f(i)=f(1)=1;当1<i<=n时,f(i)=f(i-1)*2,即它的前一个数的2倍。
程序:
REM 初始化
CLS '清屏
INPUT n '输入n值
DIM f(n) '定义一个n个元素的数组f
REM 计算
FOR i = 1 TO n 'i从1循环到n
IF i = 1 THEN f(i) = 1 '当i=1时,f(i)=f(1)=1
IF i > 1 AND i <= n THEN f(i) = f(i - 1) * 2 '当1<i<=n时,f(i)=f(i-1)*2
NEXT i
REM 输出
PRINT f(n) '输出f(n),即数列的第n个数
小结:
可以看到,程序几乎和分析完全一样。
当得到关系式后,写出程序便不是一件难事了。
对于这个题,因为f(i)只和f(i-1)有关,所以只需要保留前一个数就可以了;而且循环中的条件很繁复。例题程序中之所以那样写,只是为了让大家更好地理解。简化后的程序大家可以自己完成。
板凳
faintzw [专家分:2660] 发布于 2005-04-15 21:53:00
楼上的……这个怎么这么像我写的?
3 楼
wqbt [专家分:30] 发布于 2005-04-15 23:12:00
不知道以前在某个论坛下载在机子上现在拿出来用的
4 楼
staa [专家分:3690] 发布于 2005-04-17 07:52:00
http://www.programfan.com/club/showbbs.asp?id=52276
5 楼
w1212q [专家分:660] 发布于 2006-11-29 11:22:00
OS,OS,OS,晕/
我来回复