https://blog.csdn.net/qq_42101694/article/details/97422105
数列 a 满足 a1=1.5−1,ai+1=2i−11−4i×ai(i≥1),求 an。输出保留 8 位小数。
样例输入:10
样例输出:0.01748215
题解:直接推会有精度问题,倒推即可。
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 1e7 + 10;
int n;
double a[N];
int main(){
scanf("%d", &n);
for(int i = 114514; i >= 1; i--){
a[i] = (1-(2*i-1)*a[i+1])/(4*i);
}
printf("%.8f\n", a[n]);
return 0;
}
但是将 999999 换成 114514,或任意一个较大的数,都是正确的!请问这是为什么