1.题目大意
f(n)=8+n2(n−2)2f(n−2),f(1)=f(2)=8.
以及
g(n)=f(n)−n2(n−1)2f(n−1)+n21.
2.化简 f(n)
递推只关联
f(n) 与
f(n−2),
设
h(n)=f(n)−8,则
h(n)=n2(n−2)2h(n−2)+n2(n−2)2⋅8.
偶数情况 n=2k
初始
f(2)=8,所以
h(2)=0。
h(2k)=k2(k−1)2h(2k−2)+8⋅k2(k−1)2.
令
ak=h(2k),则
a1=0,
ak=k2(k−1)2ak−1+8⋅k2(k−1)2.
k2ak=(k−1)2ak−1+8(k−1)2.
令
bk=k2ak,
则
b1=12⋅a1=0,
bk=bk−1+8(k−1)2.
所以
bk=8∑j=1k−1j2=8⋅6(k−1)k(2k−1).
所以
ak=k2bk=6k28(k−1)k(2k−1)=3k4(k−1)(2k−1).
所以
f(2k)=8+3k4(k−1)(2k−1)=3k24k+4(k−1)(2k−1)=3k4(2k+1)(k+1).
奇数情况 n=2k+1
初始
f(1)=8,所以
h(1)=0。
h(2k+1)=(2k+1)2(2k−1)2h(2k−1)+8⋅(2k+1)2(2k−1)2.
令
ck=h(2k+1),
c0=h(1)=0,
ck=(2k+1)2(2k−1)2ck−1+8⋅(2k+1)2(2k−1)2.
两边乘以
(2k+1)2:
(2k+1)2ck=(2k−1)2ck−1+8(2k−1)2.
令
dk=(2k+1)2ck,则
d0=12⋅c0=0,
dk=dk−1+8(2k−1)2.
于是
dk=8∑j=1k(2j−1)2.
已知
∑j=1k(2j−1)2=3k(4k2−1),
所以
dk=8⋅3k(4k2−1).
所以
ck=(2k+1)2dk=3(2k+1)28k(4k2−1).
所以
f(2k+1)=8+ck=8+3(2k+1)28k(4k2−1).
因此
f(2k+1)=3(2k+1)8(k+1)(2k+3).
总结:
f(n)=⎩⎨⎧3k4(2k+1)(k+1),3(2k+1)8(k+1)(2k+3),n=2k,n=2k+1.
3.计算 g(n)
g(n)=f(n)−n2(n−1)2f(n−1)+n21.
n=2k 情况
f(2k)=3k4(2k+1)(k+1),
f(2k−1)=3(2k−1)8k(2k+1)
f(2k)−(2k)2(2k−1)2f(2k−1)=3k4(2k+1)(k+1)−4k2(2k−1)2⋅3(2k−1)8k(2k+1).
于是
f(2k)−(2k)2(2k−1)2f(2k−1)=k2(2k+1).
因此
g(2k)=k2(2k+1)+4k21.
n=2k+1 情况
f(2k+1)=3(2k+1)8(k+1)(2k+3),
f(2k)=3k4(2k+1)(k+1)。
f(2k+1)−(2k+1)2(2k)2f(2k)=3(2k+1)8(k+1)(2k+3)−(2k+1)24k2⋅3k4(2k+1)(k+1).
于是
g(2k+1)=2k+18(k+1)+(2k+1)21.
4. g(n) 公式
偶数
n=2k:
g(2k)=k2(2k+1)+4k21.
奇数
n=2k+1:
g(2k+1)=2k+18(k+1)+(2k+1)21.
-
若
n 偶,
k=n/2:
g(n)=n/22(n+1)+n21=n4(n+1)+n21.
-
若
n 奇,
n=2k+1,
k=(n−1)/2:
g(n)=n8(2n−1+1)+n21=n8⋅2n+1+n21=n4(n+1)+n21.
奇偶情况一致
g(n)=n4(n+1)+n21=2+n1.
5.代码
很简单了
CPP#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int T, n;
int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> T;
while(T --) {
cin >> n;
cout << fixed << setprecision(8) << (2.0 + 1.0 / (double) n);
}
return 0;
}