Python 如何使用';fn';,它生成一个计算黄金分割率的函数
使用“fn”生成计算黄金分割率近似值的函数 最终公式: 1+1/(1+1/(1+1/(…)) 一些结果: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”是调用次数(以及连
golden_ratio(0) = 1
golden_ratio(1) = 2
golden_ratio(2) = 1.5
golden_ratio(100) = 1.6180...
函数签名:def golden_ratio(n),其中“n”是调用数(以及连分数中的项数)
一般来说,我完成了任务,以下是错误:
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
。因此,您得到的除法为零
可能的解决方案
有三种可能的解决方案来修复代码
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时得到一个错误)。