我已经尝试了几天来解决有关欧拉功能的问题。 我必须想出一个像这样的作品:
float f_euler(int n)
f_euler(0)=2
f_euler(1)=2+ (2/2)=3
f_euler(2)=2+ 2/(2+ 3/3)= 2.6666…
f_euler(5)=2+ 2/(2+ 3/(3+ 4/(4+ 5/(5+6/6)))))= 2.7184…
等...
此代码使用C语言编写。
请!如果有人帮助过我,我会很高兴,我绝望了! d:
谢谢:)
问题1.1:
我最终制作了这个算法,但我不确定它是否会起作用:
F(N,I):
很抱歉,如果我没有清楚地解释自己,但我在这个网站上是新的。
谢谢大家!
答案 0 :(得分:0)
尝试将问题分解为
Approximation = Starting approximation + Error Correction
然后你可以按照
的形式表示它Approximation(call N) = Approximation(call N - 1) + Error Correction
最后编写一个看起来像
的C函数float approximation = getApproximation(oldApproximation, other items...);
因为纠错可以从"其他项目"
计算出来答案 1 :(得分:0)
从编程的角度来看,我认为你正在接近这个。不要向内递归,而是考虑从底部开始向上计算。从您的示例开始:
float f_euler(int n)
f_euler(0)=2
f_euler(1)=2+ (2/2)=3
f_euler(2)=2+ 2/(2+ 3/3)= 2.6666…
f_euler(5)=2+ 2/(2+ 3/(3+ 4/(4+ 5/(5+6/6)))))= 2.7184…
我们可以将f_euler(5)
的步骤重写为一系列更新
val = 6
val = 5 + 6/val
val = 4 + 5/val
val = 3 + 4/val
val = 2 + 3/val
val = 1 + 2/val
模式以及它应该如何转换为循环应该更加清晰 表示。
请注意,最后一行应为2 + 2/val
,但您可以在返回前添加其他单位;这更清楚地显示了循环结构。