|
Option Explicit
Sub jin(n)
If n < 4 Then
jin n + 1
jin n + 1
End If
End Sub
Sub 调用jin()
jin 1
End Sub
Option Explicit
Dim arr1(1 To 100, 1 To 1) '把分组后的结果放在arr1中
Dim k As Integer '作为arr1填充时的行数
Sub 组合()
Dim arr
k = 0
Erase arr1
arr = Range("a2:a" & Range("a65536").End(xlUp).Row)
zuhe arr, 1, "", 0
Range("c2").Resize(100) = ""
Range("c2").Resize(k) = arr1
End Sub
Sub zuhe(arr, x, sr, y)
'arr 把源数组导入子过程
'x 递归的索引号
'sr 连接的字符串
'y 连接的次数
If y = [b2] Then
k = k + 1
arr1(k, 1) = sr
Exit Sub
End If
If x < UBound(arr) + 1 Then
zuhe arr, x + 1, sr & arr(x, 1), y + 1
zuhe arr, x + 1, sr, y
End If
End Sub
本人正在学习递归思维,但是 上面两行代码始终参悟不透 第一个代码是递归基础 通过两个递归可以获得所有情况,我通过穷举勉强可以理解,但是第二个代码 有关数学里面的排列组合 但是我搞不懂 为什么他这么写就能囊括所有情况 是依靠什么逻辑 获得所有结果 附件传了
|
|