[蓝桥杯][2019年第十届真题]Fibonacci 数列与黄金分割

题目描述

Fibonacci 数列是非常著名的数列:

F[1] = 1,

F[2] = 1,

对于 i > 3,F[i] = F[i − 1] + F[i − 2]

Fibonacci 数列有一个特殊的性质,前一项与后一项的比值,F[i]/F[i + 1], 会趋近于黄金分割。

为了验证这一性质,给定正整数 N,请你计算 F[N]/F[N + 1],并保留 8 位 小数。

输入

一个正整数 N。(1 ≤ N ≤ 2000000000)

输出

F[N]/F[N + 1]。答案保留 8 位小数。

样例输入

2

样例输出

0.50000000


思路

这里有一个坑,如果是按照普通的Fibonacci来写的话,会超时。题目说到“会趋近于黄金分割”,于是打印下来输入N=100的情况,可以看到在N=20左右处收敛于0.61803399

 

 

 

代码

 1 #include<iostream>
 2 #include<iomanip>
 3 using namespace std;
 4 /*
 5 
 6 */
 7 
 8 int main()
 9 {
10     int n;
11     cin >> n;
12     int F[20];
13     F[0] = 1;
14     F[1] = 1;
15     for (int i = 2; i<20; i++) {
16         F[i] = F[i-1] + F[i-2];
17     }
18     if (n < 20) {
19         double res = double(F[n - 1]) / double(F[n]);
20         cout << setiosflags(ios::fixed) << setprecision(8);
21         cout << res;
22     }
23     else
24         cout << "0.61803399";
25     return 0;
26 }

 

posted @ 2020-03-25 02:31  champanesupernova  阅读(725)  评论(0编辑  收藏  举报