黄金比例函数习题

简介: 题目要求:The definition of a Fibonacci sequence is like this: - F(0) = 0 - F(1) = 1 - F(n) = F(n-1) + F(n-2)Now let’s define G(n) = F(n)/F(n+1).

题目要求:

The definition of a Fibonacci sequence is like this:
- F(0) = 0
- F(1) = 1
- F(n) = F(n-1) + F(n-2)

Now let’s define G(n) = F(n)/F(n+1).

Golden ratio is the limit of G(n) when n approaches infinity.

With all the above information, we have a way to estimating golden ratio g:

Find the first n that matches |G(n+1) - G(n)| < t, where t is the
precision threshold, then the corresponding G(n) is considered as
the estimated value of golden ratio.

解题思路:

  1. 这里面需要考虑的首先是给出怎样的输入,得到怎样的输出。

  2. 根据题目要求,输入只有一个数,就是t,输出为找到的第一个满足条件的n。

  3. 然后就需要考虑时间复杂度和空间复杂度。所以有序只需要输出一个数n,那么是不需要把整个数列作为G(n)函数的输出,只需要一个数,然后通过这个数在G(n)中的位置输出n

这里面需要注意python2和python3的区别,在python3中,一个数除以另一个数如果无法整除会输出浮点数

x = 1/3
x
0.3333333333333333
def fibo01(n):
    x, y = 0, 1

    while(n):
        x,y,n = y, x+y, n - 1
    return x

# 构建斐波那契额数列,输入一个正整数num,返回含有num个数的斐波纳契数列
def fibo(num):
    numList = [0,1]
    for i in range(num - 2):
        numList.append(numList[-2] + numList[-1])
    return numList # 返回一个数列

# 构建G数列,输入一个数num,返回第num个G数列中的数
def G(num):
    numList = [0, 1]    
    for i in fibo(num):
        numList.append(fibo(num)[-2]/fibo(num)[-1])
    return numList[num] # 返回一个数,作为下面判断条件的输入

# 构建函数find_first_n(t), 输入t,t为大于0小于1的浮点数,输出第一个满足条件的 |G(n+1) - G(n)| < t 的n值
def find_first_n(t):
    i = 0
    while abs(G(i+1)-G(i)) > t:
        i += 1
    return i
find_first_n(0.000000000001)
31

注: python中科学计数法的表示

10**5
100000
10 ** -5
1e-05
10 ** (-5) == 0.00001
True
目录
相关文章
|
6月前
|
机器学习/深度学习 人工智能 算法
【代数学作业1完整版-python实现GNFS一般数域筛】构造特定的整系数不可约多项式:涉及素数、模运算和优化问题
【代数学作业1完整版-python实现GNFS一般数域筛】构造特定的整系数不可约多项式:涉及素数、模运算和优化问题
125 0
|
6月前
求幂级数展开的部分和 (20 分)新鲜出炉!!!
求幂级数展开的部分和 (20 分)新鲜出炉!!!
43 0
|
6月前
|
机器学习/深度学习 人工智能 算法
【代数学作业1-python实现GNFS一般数域筛】构造特定的整系数不可约多项式:涉及素数、模运算和优化问题
【代数学作业1-python实现GNFS一般数域筛】构造特定的整系数不可约多项式:涉及素数、模运算和优化问题
118 0
|
5月前
|
搜索推荐 算法 C++
蓝桥杯分糖果、最小化战斗力差距、小蓝零花钱
这是一个关于算法问题的集合,包括三个不同的任务: 1. **分糖果**:肖恩有不同种类的糖果要分给学生,目标是使得到糖果字符串的字典序最大且尽量小。给定糖果种类数和一个初始字符串,输出能达到的最小字典序的最大值。 2. **最小化战斗力差距**:小蓝需要将队员分为两组,每组战斗力差距最小。给定队员数量和战斗力值,找出最小的战斗力差距。 3. **小蓝的零花钱**:小蓝要在序列中分割偶数和奇数,每次分割代价是两端元素差的绝对值。目标是在预算内确定最多能进行多少次这样的分割。 每个问题都提供了输入输出示例和相应的C++代码片段来解决这些问题。
|
6月前
|
vr&ar
分位数自回归QAR分析痛苦指数:失业率与通货膨胀率时间序列|数据分享
分位数自回归QAR分析痛苦指数:失业率与通货膨胀率时间序列|数据分享
算法训练Day35|860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球
算法训练Day35|860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球
|
存储
L1-049 天梯赛座位分配 (20 分)( for循环的深入理解+三维数组+错误分析)
L1-049 天梯赛座位分配 (20 分)( for循环的深入理解+三维数组+错误分析)
148 0
|
测试技术
PAT乙级1005.继续(3n+1)猜想(25分)
PAT乙级1005.继续(3n+1)猜想(25分)
84 0