结合基础情况和归纳情况,我们得出了 n 为任意正整数时的分配方法。数学归纳法的逻辑和递归代码直接对应:
func ch(r *rand.Rand, k int, i int) int {
if i == 1 {
// 基础情况
return 1
} else {
// 归纳情况
b := ch(k, i-1)
if rand.Float() < 1.0/float64(i) {
return i
} else {
return b
}
}
}
func ch_wrapper(k int, i int) int {
r := rand.Seed(k) // 在计算之前, 将key作为随机数种子
return ch(r, k, i)
}