vb遞歸演算法
Ⅰ 關於全組合演算法
參照我的回答:VBA 6~15個數中,任選6個數排列組合:http://..com/question/289742264.html
調整一下遞歸函數Private Sub zuhe(L As Integer, M As Integer)調用的M參數取值(可重復與不可重復有一點區別)
Ⅱ 二級VB中的一些專業術語很難懂
笛卡兒乘積:
設D1,D2,…,Dn為n個任意集合。定義D1,D2,…,Dn的笛卡爾乘積為:
D1×D2×… ×Dn = {(d1,d2,…,dn) | di ∈Di,i= l,2,…,n}
演算法:
求解問題類的、機械的、統一的方法,它由有限多個步驟組成,對於問題類中的每個給定的具體問題,機械地執行這些步驟就可以得到問題的解答。演算法的這種特性,使得計算不僅可以由人,而且可以由計算機來完成。用計算機解決問題的過程可以分成三個階段:分析問題、設計演算法和實現演算法。
中國古代的籌算口決與珠算口決及其執行規則就是演算法的雛形,這里,所解決的問題類是算術運算。古希臘數學家歐幾里得在公元前3世紀就提出了一個演算法,來尋求兩個正整數的最大公約數,這就是有名的歐幾里得演算法,亦稱輾轉相除法。中國早已有「算術「、「演算法」等詞彙,但是它們的含義是指當時的全部數學知識和計算技能,與現代演算法的含義不盡相同。英文algorithm(演算法)一詞也經歷了一個演變過程,最初的拼法為algorism或algoritmi,原意為用阿拉伯數字進行計算的過程。這個詞源於公元 9世紀波斯數字家阿爾·花拉子米的名字的最後一部分。
在古代,計算通常是指數值計算。現代計算已經遠遠地突破了數值計算的范圍,包括大量的非數值計算,例如檢索、表格處理、判斷、決策、形式邏輯演繹等。
在20世紀以前,人們普遍地認為,所有的問題類都是有演算法的。20世紀初,數字家們發現有的問題類是不存在演算法的,遂開始進行能行性研究。在這一研究中,現代演算法的概念逐步明確起來。30年代,數字家們提出了遞歸函數、圖靈機等計算模型,並提出了丘奇-圖靈論題(見可計算性理論),這才有可能把演算法概念形式化。按照丘奇-圖靈論題,任意一個演算法都可以用一個圖靈機來實現,反之,任意一個圖靈機都表示一個演算法。
按照上述理解,演算法是由有限多個步驟組成的,它有下述兩個基本特徵:每個步驟都明確地規定要執行何種操作;每個步驟都可以被人或機器在有限的時間內完成。人們對於演算法還有另一種不同的理解,它要求演算法除了上述兩個基本特徵外,還要具有第三個基本特徵:雖然有些步驟可能被反復執行多次,但是在執行有限多次之後,就一定能夠得到問題的解答。也就是說,一個處處停機(即對任意輸入都停機)的圖靈機才表示一個演算法,而每個演算法都可以被一個處處停機的圖靈機來實現。
二叉數:
二叉數為一遞歸數據類型,由一個根節點引出,每個節點有兩支,每支也是一棵二叉數
Ⅲ VB階乘的演算法
求階乘的兩種演算法
方法一(計數循環)
使用For語句。
Function Factorial(n As Integer) As Long
On Error GoTo Hander
Dim i As Long
Factorial = 1
For i = n To 1 Step -1
Factorial = Factorial * i
Next i
Exit Function
Hander:
MsgBox "數值過大!", vbExclamation, "Error"
Resume Next
End Function
方法二(遞歸)
簡單地說,遞歸就是一個過程調用過程本身。
思路為:n! = n * (n-1)!
Function Factorial(n As Integer) As Long
On Error Goto Hander
If n > 0 Then
Factorial = n * Factorial(n - 1)
Else
Factorial = 1
End If
Exit Sub
Hander:
Msgbox "數值過大!",vbExclamation,"Error"
Resume Next
End Function
例如,當 n=5 時,求 Factorial(5) 的值變為 5 * Factorial(4)。而 Factorial(4) 又可變為 4 * Factorial(3) ......,Factorial(2)又可變為 2 * Factorial(1),這時 Factorial(1) = 1 已知,遞歸調用停止,其執行結果為 5 * 4 * 3 * 2 * 1,即 5! 。
過程中還是用了錯誤陷阱(On Error...),以防數值過大發生溢出錯誤。