回 帖 发 新 帖 刷新版面

主题:求助!参与者加分!

地归怎么使用?
举例![em9]

回复列表 (共10个回复)

沙发

递归嘛!就是在一个过程里再次调用这个过程,也就是自己调用自己.
如:求n!.
CLS
INPUT n
PRINT abcdefg((n))
END
FUNCTION abcdefg(i)
IF i=1 THEN
   abcdefg=1
ELSE
   abcdefg=i*abcdefg(i-1)        '这里出现递归
END IF
END FUNCTION

板凳

地归是什么东西?
没见过!
是QB里的么?

3 楼

你的名字是按照007BOND的吧!

4 楼

递归啊!打字打清楚。
[em27][em27]

5 楼

红书10章有。

6 楼

递归啊!比较麻烦!最好看书!

7 楼

递归的过深会出现错误信息:Out of stack space(栈溢出)

如果递归是无底洞,也会出现这个错误信息。

比如:
PRINT wrongstack(1)
END
FUNCTION wrongstack(i)
IF i<=0 THEN wrongstack=i+1 ELSE wrongstack=wrongstack(i+1)
END FUNCTION
这个递归是无底洞,但是程序并不会出现死循环,而是出现错误信息。

LZ:以后用户名不许盗版了!!!!!!!

8 楼

=============================转贴(来自wqbt)==================================
    递推法是组合数学中的一个重要解题方法,许多著名问题用递推法来解显得精巧简捷。递推在程序设计中也有很广泛的应用。今天我们就来看看递推的解题方法。
    递推的基本思想是根据已经求得的量,根据某个关系式计算出未知的一个量,直至求出所要求的结果。
    用递推法解题,首先是要列出符合题意的递归关系式——递归方程(不明白的朋友可以认为是根据已知量求一个未知量的式子),再解所得方程,直至算出最终结果。

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

9 楼

=======================不好意思,这个是VB的,你改一下=========================
Private Sub Command1_Click() 
Print Test(3) 
End Sub 
Private Function Test(t As Integer) As Integer 
Dim i As Integer 
If t >= 1 Then 
Call Test(t - 1) 
For i = 3 To t Step - 1 
Print Chr(Asc("A") + i) 
Next i 
Print 
End If 
Test = t 

End Function 
分析:调用Test(3); 
t=3, t>=1成立, 调用Test(2); 
t=2, t>=1成立, 调用Test(1); 
t=1, t>=1成立, 调用Test(0); 
t=0, t>=1不成立, 函数返回值为0. 

返回到Test(1), 执行余下部分: 

for i=3 to 1 step -1 
print chr(asc("A")+i) 
next 
print 

输出: 




调用的Test(1)结束, 函数返回值1. 


继续执行Test(2)的余下部分: 

for i=3 to 2 step -1 
print chr(asc("A")+i) 
next 
print 

输出: 



调用的Test(2)结束, 函数返回值2. 


继续执行Test(3)的余下部分: 

同理输出: 


调用的Test(3)结束, 函数返回值3. 

最后, 执行 Print Test(3) 的输出, 打印返回结果: 


----------- 
所以, 最后的结果是: 









3


=================================请别投诉我==================================

10 楼


CLS
INPUT n
PRINT abcdefg((n))
END
FUNCTION abcdefg(i)
IF i=1 THEN
   abcdefg=1
ELSE
   abcdefg=i*abcdefg(i-1)        '这里出现递归
END IF
END FUNCTION

我来回复

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