回 帖 发 新 帖 刷新版面

主题:QB里有没有递归算法?

QB里有没有递归算法?


如何解汉诺塔问题?[em11]

回复列表 (共5个回复)

沙发

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)有关,所以只需要保留前一个数就可以了;而且循环中的条件很繁复。例题程序中之所以那样写,只是为了让大家更好地理解。简化后的程序大家可以自己完成。

板凳

楼上的……这个怎么这么像我写的?

3 楼

不知道以前在某个论坛下载在机子上现在拿出来用的

4 楼

http://www.programfan.com/club/showbbs.asp?id=52276

5 楼


OS,OS,OS,晕/

我来回复

您尚未登录,请登录后再回复。点此登录或注册