计算九连环需要多少步解下来的方法

根据九连环的玩法我们可以知道,面对一个所有环都处于“下环“”的状态,如果我们想上前 n n n 环,那么我们首先要先上前 n − 1 n-1 n1 环,然后下前 n − 2 n-2 n2 环,然后上第 n n n 环,然后上前 n − 2 n-2 n2 环。因此,如果我们把上第 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=an1+2an2+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+322n21

同样得到 a 9 = 341 a_9=341 a9=341 与 python 计算结果一致。


参考资料:

百度文库–2.4 线性常系数非齐次递推关系

CSDN–python实现斐波那契数列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值