

递归的函数过程--回归到自身开头的位置,再进行。递归是人们在解决问题时用到的一种方法。不少问题本身具有这种特性。如求阶乘,设一个具有递归功能的函数:fac(n)=n!Public Function fac(n as Integer) As Long If n=1 then fac=1 Else fac=n*fac(n-1) End IfEnd FunctionPrivate Sub Command1_Click() Dim k As Integer k=InputBox("求阶乘N!,输入N","给定",4) Print k;"的阶乘";k;"!=";fac(k)End Sub 算法依据是:n!=n*(n-1)!,其中(n-1)!=(n-1)*(n-2)!所以,可以作出递归的定义:fac=n*fac(n-1),即在等号右边先计算fac(n-1)时,递归调用了(n-1)*fac(n-2),...一直到最后出现fac(1)=1结束递归条件为止。 所以,一要规定递归结束时的值;二要用递归形式表示,并且递归向终止条件行进。 递归对于求级数、指数的运算有特殊效果,阶乘就是相乘的级数-------------------------------------------------------------------------------- 函数的递归调用,是人们在解决问题中需要引入的方法。但是,在一件事未终结之前,又回到开头,有可能造成无限制的回复。程序设计必须避免这种难堪的结果。我们可以用if语句来控制,即在某种条件下,才可以做递归,否则就不再继续了。 下面举另一个例子:5个人依次坐在一排。问第5个人几岁?他说比第4个人大2岁。第4、3、2个人都说比相邻的大2岁。最后问第1个人,是10岁。求:第5个人是几岁?Public Function Age(n as Integer) as Integerif n=1 then Age=10 '第五次回的是10Else Age=Age(n-1)+2 '第二次返回Age(3)+2,第三次回的是Age(2)+2 ,第四次回的是Age(1)+2End IfEnd FunctionPrivate Sub Command1_Click()Print "No5 Age=";Age(5) '第一次返回Age(4)+2,...在第五次返回后是10+2+2+2+2=18End Sub-------------------------------------------------------------------------------- 以上是递归。递推是从已知的事实出发。下面是求黄金分割的程序:Private Sub Command1_Click() Dim a(50) As Long, i As Integer, x As Double, y As Double i = 1: a(0) = 0: a(1) = 1: x = 0: Text1.Text = "" ag: i = i + 1: a(i) = a(i - 1) + a(i - 2): y = a(i - 1) / a(i) Text1.Text = Text1.Text + Str(i) + "--" + Str(y) + vbCrLf If Abs(x - y) >= 0.000000000000001 Then x = y: GoTo ag Print "共计算到第"; i; "位。"End Sub