关于VB的枚举法和递推问题
关于VB的枚举法和递推问题
最近在学VB,碰到类似二元递推的问题一直找不到合适的表达方式.比如有一题,上十三个台阶的,规定一次只能上1个或者2个台阶,求所有的上台阶方案组合及其总数.递推式很显然为n=n+1 或者 n= n+2,但是要怎么样让计算机随机(或者是按某种顺序)地去选择加上去的是1或者是2,又或是更多的呢?
类似地还有一根钢管长多少多少,然后有两种截取方法,问是截取后剩下的最少的截取方案等等..纠结就在于那个每次变化的取值要可以在2个之中任意取,又要都取到~脑子有点糊涂,
还有,一个小小的问题,要怎么样让7个变量在7个数值中任意选取,但两两互不重复呢?(打个比方而已)要构造function要怎么构造啊~
递归的方法,形式如下:
function findit(varStep)
call findit(1)
call findit(2)
end function
具体代码(VB6下测试通过)
窗体上放一个文本框(Name=txtResult,MultiLine=True)和按钮(name=cmdCalc)
Private pCount As Long
Private strResult As String
Private Sub cmdCalc_Click()
pCount = 0
strResult = ""
Call FindIt(13,1,"")
Call FindIt(13,2,"")
txtResult.Text = strResult '显示结果
cmdCalc.Caption = Format(pCount)
pCount = 0
strResult = ""
End Sub
Private Function FindIt(nValue As Integer,nStep As Integer,strPath As String) As Boolean
Dim nValTemp As Integer
Dim strCurPath As String
nValTemp = nValue - nStep'下一步可用的台阶
strCurPath = strPath & Format(nStep)'记录这一步的走法(1或者2)
Select Case nValTemp
Case Is FindIt = False
Exit Function
Case 0 '成功获得一种走法,记录走法,计数加1
pCount = pCount + 1
strResult = strResult & IIf(Len(strResult) > 0,vbCrLf,"") & strCurPath
FindIt = True
Exit Function
Case Else '还没走完
Call FindIt(nValTemp,1,strCurPath)
Call FindIt(nValTemp,2,strCurPath)
End Select
End Function不好意思啊~我的水平有限,看看不太懂您写的代码,包括findit的这个函数。其实好像这个问题没有您写得那么“高深”啊~ 这个练习是在我们学完了循环语句之后的,您能不能用循环语句给我做一遍呢~辛苦您啦~或者您给我说说思路吧,我就是不知道该怎么样在每一步有两种选择方案时进行随机选择。很抱歉,对这方面我也不是很熟,没法用循环来表示遍历。期待其他高手来解答!要纠正一点,这问题不是随机,而是遍历,就是说所有的情况都要列举出来。用递归来表示遍历思路上最简单,就是实现的时候有点麻烦,可能要设置一些临时变量和标记变量。函数findit()的思路就是:先假设要走的台阶数还有13,对每种走法进行尝试。如果还有台阶,则调用它本身,对于走1步和走2步分别进行尝试。如果可走的台阶为0,则说明得到一种走法,0说明还有台阶,继续调用过程本身。Private Sub Command1_Click()ClsDim a%(0 To 13), i%a(0) = 0a(1) = 1i = 2Do While i