我解决编码问题,并发现了下面的关系找到的可能安排的数量:递归关系的一般公式?
one[1] = two[1] = three[1] = 1
one[i] = two[i-1] + three[i-1]
two[i] = one[i-1] + three[i-1]
three[i] = one[i-1] + two[i-1] + three[i-1]
我能有轻松使用for循环找到直到n
,但是n
的值是10^9
的顺序,并且我将无法从1
迭代到如此庞大的数字。
对于n
的每个值,我需要在O(1)
时间输出值(one[n] + two[n] + three[n]) % 10^9+7
。
一些结果:
- 对于n = 1,结果= 3
- 对于n = 2,结果= 7
- 对于n = 3,结果= 17
- 对于n = 4 ,结果= 41
我花了几个小时在上面找不到n
的通用公式。有人可以帮我吗。
编辑:
n = 1, result(1) = 3
n = 2, result(2) = 7
n = 3, result(3) = result(2)*2 + result(1) = 17
n = 4, result(4) = result(3)*2 + result(2) = 41
所以,result(n) = result(n-1)*2 + result(n-2)
或 T(n) = 2T(n-1) + T(n-2)
你试过纸,铅笔和一些代数吗? – FDavidov
是的..尝试铅笔纸找出一个模式。找不到它。尽管代数不太好 –
嗯,我可以告诉你,乍一看,这看起来不难看出。不幸的是,我没有时间参与其中。再试一次,这一次更难。 – FDavidov