主题:求助!参与者加分!
bond007
[专家分:130] 发布于 2007-08-01 08:57:00
地归怎么使用?
举例![em9]
最后更新于:2007-08-01 09:19:00
回复列表 (共10个回复)
沙发
wzc1996 [专家分:1680] 发布于 2007-08-01 09:11:00
递归嘛!就是在一个过程里再次调用这个过程,也就是自己调用自己.
如:求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
板凳
Mr.Cao [专家分:130] 发布于 2007-08-01 09:13:00
地归是什么东西?
没见过!
是QB里的么?
3 楼
wzc1996 [专家分:1680] 发布于 2007-08-01 09:15:00
你的名字是按照007BOND的吧!
4 楼
Mr.Cao [专家分:130] 发布于 2007-08-01 09:18:00
递归啊!打字打清楚。
[em27][em27]
5 楼
剑圣风暴 [专家分:450] 发布于 2007-08-01 10:12:00
红书10章有。
6 楼
wzc1996 [专家分:1680] 发布于 2007-08-01 11:20:00
递归啊!比较麻烦!最好看书!
7 楼
Matodied [专家分:7560] 发布于 2007-08-01 13:13:00
递归的过深会出现错误信息: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 楼
yaoyusheng [专家分:460] 发布于 2007-08-02 00:19:00
=============================转贴(来自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 楼
yaoyusheng [专家分:460] 发布于 2007-08-02 00:28:00
=======================不好意思,这个是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
输出:
D
C
B
调用的Test(1)结束, 函数返回值1.
继续执行Test(2)的余下部分:
for i=3 to 2 step -1
print chr(asc("A")+i)
next
print
输出:
D
C
调用的Test(2)结束, 函数返回值2.
继续执行Test(3)的余下部分:
同理输出:
D
调用的Test(3)结束, 函数返回值3.
最后, 执行 Print Test(3) 的输出, 打印返回结果:
3
-----------
所以, 最后的结果是:
D
C
B
D
C
D
3
=================================请别投诉我==================================
10 楼
yfyf [专家分:440] 发布于 2007-08-02 08:27:00
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
我来回复