在我的java编程类中,我们有一个实验室赋值(不值得点)来实现几个递归方法。我已经完成了基于给定递归函数的递归方法,并且我已经为剩余部分完成了一个必要的阶乘递归方法,这是一个sigma系列,我目前很难缠绕我的脑袋。
我们给出了这个公式:
s(n) = sigma[(s(n - i) - 1) / i!, i = 1, n] and s(0) = 0
我已经写出s(1)-s(5)的结果(使用我的图形计算器来验证我的答案),但我很难弄清楚如何正确实现这个递归过程。 / p>
我已经建立了一个“sigma”方法,据我所知,这个方法适当,所以我认为我的“公式”方法存在问题。最糟糕的是,该公式看起来是正确的(我的想法是最好的)并且代码目前陷入无限循环。
{{1}}
我应该从哪里开始弄清楚如何正确展开这个递归序列?
答案 0 :(得分:1)
根据您链接的公式,递归应该是(更改要关联的变量的名称):
private static double sequence2(int n) {
if (n == 0) { return 0; }
return (sequence2(n-1) - 1) / factorial(n-1);
}
这将按照S(n-1), S(n-2) ... S(1)
答案 1 :(得分:0)
在与老师交谈后,他提供了以下方法作为计算正确值的可接受方式:
static double generateSigmaSequnce(int n) {
if (n < 1) { return 0; }
double sum = 0;
for (int i = 1; i <= n; i++) {
sum += (generateSigmaSequnce(n - i) - 1) / factorial(i);
}
return sum;
这段代码确实为sigma序列返回了正确的值,但在我看来它有些不尽如人意,因为我们不得不使用迭代循环来推动递归练习中的行为。我将从这里开始困惑,以确定我是否可以创建一个新方法/扩充此方法以包含递归求和,但暂时(以及在我老师的自己的代码中)这是正确的。