如何将此sigma符号“展开”为递归方法

时间:2017-09-12 01:57:42

标签: java recursion

在我的java编程类中,我们有一个实验室赋值(不值得点)来实现几个递归方法。我已经完成了基于给定递归函数的递归方法,并且我已经为剩余部分完成了一个必要的阶乘递归方法,这是一个sigma系列,我目前很难缠绕我的脑袋。

我们给出了这个公式:

s(n) = sigma[(s(n - i) - 1) / i!, i = 1, n] and s(0) = 0

我已经写出s(1)-s(5)的结果(使用我的图形计算器来验证我的答案),但我很难弄清楚如何正确实现这个递归过程。 / p>

我已经建立了一个“sigma”方法,据我所知,这个方法适当,所以我认为我的“公式”方法存在问题。最糟糕的是,该公式看起来是正确的(我的想法是最好的)并且代码目前陷入无限循环。

{{1}}

我应该从哪里开始弄清楚如何正确展开这个递归序列?

2 个答案:

答案 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序列返回了正确的值,但在我看来它有些不尽如人意,因为我们不得不使用迭代循环来推动递归练习中的行为。我将从这里开始困惑,以确定我是否可以创建一个新方法/扩充此方法以包含递归求和,但暂时(以及在我老师的自己的代码中)这是正确的。