Python 如何使用';fn';,它生成一个计算黄金分割率的函数

Python 如何使用';fn';,它生成一个计算黄金分割率的函数,python,Python,使用“fn”生成计算黄金分割率近似值的函数 最终公式: 1+1/(1+1/(1+1/(…)) 一些结果: golden_ratio(0) = 1 golden_ratio(1) = 2 golden_ratio(2) = 1.5 golden_ratio(100) = 1.6180... 函数签名:def golden_ratio(n),其中“n”是调用数(以及连分数中的项数) 一般来说,我完成了任务,以下是错误: 函数签名:def golden_ratio(n),其中“n”是调用次数(以及连

使用“fn”生成计算黄金分割率近似值的函数

最终公式: 1+1/(1+1/(1+1/(…))

一些结果:

golden_ratio(0) = 1
golden_ratio(1) = 2
golden_ratio(2) = 1.5
golden_ratio(100) = 1.6180...
函数签名:def golden_ratio(n),其中“n”是调用数(以及连分数中的项数)

一般来说,我完成了任务,以下是错误:

  • 函数签名:def golden_ratio(n),其中“n”是调用次数(以及连分数中的项数)

  • 打印(w/q) 结果是不正确的

  • 当n=1000时,它应该显示约1.62

    golden_ratio(0) = 1
    golden_ratio(1) = 2
    golden_ratio(2) = 1.5
    
    但是有了这些n-它就不起作用了。请帮帮我(

    这是我的代码:

    n=1000
    def fn(f,n):
        def wrap(*arg):
            for _ in range(n):
                arg = f(*arg)
            return arg
        return wrap
     
    def fib(q, w):
        q, w = w, q + w
        return q, w
     
    f3 = fn(fib, n)
    q, w = f3(0, 1)
    # gold section
    print(w / q)
    

    定义斐波那契函数时

    def fib(q, w):
        q, w = w, q + w
        return q, w
    
    您在
    q,w=f3(0,1)
    中选择了它的典型初始值
    0
    1
    ,假设函数的第一次调用导致
    q=1,w=1
    导致
    w/q=1.0

    你的问题 给定
    n=0
    和您的代码,您的问题是
    fib(0,1)
    不是由
    arg=f(*arg)
    执行的,因为您的for循环
    for uuu在范围(n):
    不执行(
    n=0->range(0,0)

    下面的
    return arg
    然后返回初始函数参数
    0,1
    (未更改),其结果是
    q=0,w=1
    。因此,您得到的除法为零

    可能的解决方案 有三种可能的解决方案来修复代码

  • 通过将范围(n)内的
    for:
    更改为范围(n+1)内的
    for,确保for循环在第一次迭代时执行
    n=0
  • 通过将
    q,w=f3(0,1)
    更改为
    q,w=f3(1,1)
    来调整初始函数参数,使其成为
    return arg
    返回的预期结果
  • 改变你的想法,
    黄金分割率(0)
    实际上是近似值的第一次迭代,因此你的迭代变量
    n
    是以1为基础的,而不是以0为基础的,即在你的代码中强制执行
    n>=1
  • 选择第一个选项,你会得到

    n=0
    def fn(f,n):
        def wrap(*arg):
            for _ in range(n+1): # <-- fix for-loop
                arg = f(*arg)
            return arg
        return wrap
     
    def fib(q, w):
        q, w = w, q + w
        return q, w
     
    f3 = fn(fib, n)
    q, w = f3(0, 1)
    # gold section
    print(w / q)
    

    ??当n=0时,它抛出一个
    除以零的错误
    ,对于所有其他值,它似乎计算出正确的近似值?如果你是为某种在线赋值而这样做的,可能问题在于你实际上没有编写一个名为
    golden_ratio
    的函数,它接受调用次数作为参数?但是如图所示的e代码进行预期的计算,最后的
    print
    语句显示我
    1.61803398749895
    。当n-1000给出正确的值时,我错了,n=0(除以零误差),但应该1,如示例和其他…1和2我重复:哦,好吧,仔细考虑f3的初始参数应该是什么。越大的
    n
    越准确,所以当你得到n=1000的结果时,你当然不会注意到你应该得到n=999的结果,但你会注意到当你得到结果时对于n=1,您应该在n=0时得到它(或者当您在n=0时得到一个错误)。