一、问题的引入
现有甲、乙、丙三人在传球,从甲开始传,每次传给另外两个人中的一个人,总共传 4 4 4 次,问一共有多少种传球方式。
答案为
6
6
6 种。分别为:
甲
→
\rarr
→ 乙
→
\rarr
→ 甲
→
\rarr
→ 乙
→
\rarr
→ 甲、
甲
→
\rarr
→ 乙
→
\rarr
→ 甲
→
\rarr
→ 丙
→
\rarr
→ 甲、
甲
→
\rarr
→ 乙
→
\rarr
→ 丙
→
\rarr
→ 乙
→
\rarr
→ 甲、
甲
→
\rarr
→ 丙
→
\rarr
→ 甲
→
\rarr
→ 乙
→
\rarr
→ 甲、
甲
→
\rarr
→ 丙
→
\rarr
→ 甲
→
\rarr
→ 丙
→
\rarr
→ 甲、
甲
→
\rarr
→ 丙
→
\rarr
→ 乙
→
\rarr
→ 丙
→
\rarr
→ 甲。
对于这类问题,可以直接画树状图解决,但当数大时比较麻烦,而排列组合法也较为麻烦。这时我们考虑使用一种新的方法——递推。
二、递推法的尝试
在传球的过程中,我们发现甲的球只能由乙或丙传来,而乙和丙的球只能由甲、或乙丙中的另一人传来,这样我们就可以把问题的答案由其子问题得到。
我们设
a
n
a_n
an 为传球
n
n
n 次后传到甲的情况数,
b
n
b_n
bn 为传球
n
n
n 次后传到乙、丙其中一人的情况数,可以得到递推式:
a
n
=
2
b
n
−
1
a_n=2b_{n-1}
an=2bn−1,
b
n
=
a
n
−
1
+
b
n
−
1
b_n=a_{n-1}+b_{n-1}
bn=an−1+bn−1。其中
a
1
=
0
a_1=0
a1=0,
b
1
=
1
b_1=1
b1=1。当数据规模较小时,我们可以直接用递推式一步一步地求到第
n
n
n 项,但是这个递推式还可以进行化简。
b
n
=
a
n
−
1
+
b
n
−
1
b_n=a_{n-1}+b_{n-1}
bn=an−1+bn−1
b
n
=
b
n
−
1
+
2
b
n
−
2
b_n=b_{n-1}+2b_{n-2}
bn=bn−1+2bn−2然后使用特征根法或待定系数法求得通式:
b
n
=
2
n
+
(
−
1
)
n
+
1
3
b_n=\frac{2^n+(-1)^{n+1}}{3}
bn=32n+(−1)n+1
a
n
=
2
n
+
(
−
1
)
n
×
2
3
a_n=\frac{2^n+(-1)^n\times2}{3}
an=32n+(−1)n×2这个式子十分优美,甚至你可以不用光速幂就把答案算出来。
三、方法的扩展
上面讲解了三人传球问题,那如果有四个人、五个人、六个人……甚至
m
m
m 个人,我们依然可以使用这种方法来做!
我们设
a
n
a_n
an 为传球
n
n
n 次后传到甲的情况数,
b
n
b_n
bn 为传球
n
n
n 次后传到其他某人的情况数,可以得到递推式:
a
n
=
(
m
−
1
)
b
n
−
1
a_n=(m-1)b_{n-1}
an=(m−1)bn−1,
b
n
=
a
n
−
1
+
(
m
−
2
)
b
n
−
1
b_n=a_{n-1}+(m-2)b_{n-1}
bn=an−1+(m−2)bn−1。其中
a
1
=
0
a_1=0
a1=0,
b
1
=
1
b_1=1
b1=1。
b
n
=
(
m
−
2
)
b
n
−
1
+
(
m
−
1
)
b
n
−
2
b_n=(m-2)b_{n-1}+(m-1)b_{n-2}
bn=(m−2)bn−1+(m−1)bn−2这个式子可以直接用矩阵快速幂来求值,也可以求通式:
b
n
=
(
m
−
1
)
n
+
(
−
1
)
n
+
1
m
b_n=\frac{(m-1)^n+(-1)^{n+1}}{m}
bn=m(m−1)n+(−1)n+1
a
n
=
(
m
−
1
)
n
+
(
−
1
)
n
×
(
m
−
1
)
m
a_n=\frac{(m-1)^n+(-1)^n\times (m-1)}{m}
an=m(m−1)n+(−1)n×(m−1)这个式子当
m
≠
3
m\not=3
m=3 时,你就必须用光速幂了 !