欧拉在C中的递归算法

时间:2014-11-07 15:45:41

标签: c algorithm

我已经尝试了几天来解决有关欧拉功能的问题。 我必须想出一个像这样的作品:

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):

    如果i = n ,
  • i + 1
  • 2如果i = 0&& n = 0的
  • 如果i = 0& n> 0
  • f((i + 1)+((i + 2)/ f(i + 1)))if i> 0

很抱歉,如果我没有清楚地解释自己,但我在这个网站上是新的。

谢谢大家!

2 个答案:

答案 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,但您可以在返回前添加其他单位;这更清楚地显示了循环结构。