根据九连环的玩法我们可以知道,面对一个所有环都处于“下环“”的状态,如果我们想上前 n n n 环,那么我们首先要先上前 n − 1 n-1 n−1 环,然后下前 n − 2 n-2 n−2 环,然后上第 n n n 环,然后上前 n − 2 n-2 n−2 环。因此,如果我们把上第 n n n 环所需步数记为 a n a_n an ,那么数列 a n a_n an满足:
a n = a n − 1 + 2 a n − 2 + 1 (1) a_n=a_{n-1}+2a_{n-2}+1\tag{1} an=an−1+2an−2+1(1)
这里我们认为我们每次只能操作一个环,即不能同时上下前两个环
利用该递推公式编写 python 程序,可以很轻松的计算得到 a n = 341 a_n=341 an=341
def func(n):
if n == 1:
return 1
elif n == 2:
return 2
else:
return func(n-1) + 2*func(n-2)+1
res = func(9)
print(res)
那么如何得到 a n a_n an 的通项公式呢,在广泛查阅资料后得知, a n a_n an 属于二阶线性常系数非齐次递推关系。可以通过公式计算得到。
具体计算方法可跳转到文末的参考资料
最终计算结果为
a
n
=
−
1
6
(
−
1
)
n
+
2
3
2
n
−
1
2
a_n=-\frac{1}{6}(-1)^n+\frac{2}{3}2^n-\frac{1}{2}
an=−61(−1)n+322n−21
同样得到 a 9 = 341 a_9=341 a9=341 与 python 计算结果一致。
参考资料: