欧拉';C语言中的s递归算法

欧拉';C语言中的s递归算法,c,algorithm,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: 我终于做了这个算法,但我

我已经试了几天来解决一个关于欧拉函数的问题。 我必须想出一个这样的方法:

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,则为2+(2/(f(i+1))
  • f((i+1)+(i+2)/f(i+1)),如果i>0
对不起,如果我没有解释清楚,但我是这个网站的新手


谢谢大家!

尝试将问题分解为

Approximation = Starting approximation + Error Correction
然后你可以把它描述为

Approximation(call N) = Approximation(call N - 1) + Error Correction
最后编写一个C函数,如下所示

float approximation = getApproximation(oldApproximation, other items...);

由于可以从编程的角度从“其他项”计算错误更正,因此我认为您是在倒退。与其向内递归,不如考虑从底部开始向上计算。从您的示例开始:

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
,但您可以在返回之前添加另一个单元;这将更清楚地显示循环结构。

您是否可以显示您对
f_euler
的源代码的尝试?从C的角度来看,您在这里显示的内容没有意义。欢迎使用stackoverflow。您应该提供您的尝试,如下所示:尽可能完善的文档。你越能展示你所做的事情,你就越有可能得到帮助。这一行:2+2/2=3不是合理的C代码。它是说给2/2赋值(这不是左值)值为3时,以下行也会出现同样的问题。编译器本应发出警告/错误,但未能编译文件。是否启用了所有警告/错误?在gcc中,诸如-Wall之类的参数会发现此问题。是否忽略了来自编译器的消息?f_euler(2)=2+2/(2+3/3)=2.6666…这类句子只是示例,说明如果我们用数字代替n,代码必须如何工作。这只是一个中间步骤。但在处理递归部分之前,需要使用它,这包括将近似函数嵌入自身,并添加“调用多少次”参数。非常感谢您,现在我必须看到第一次交互和最后一次交互的异常。但是现在我看到它更容易。