2017-09-12 4 views
-1

私のJavaプログラミングクラスでは、いくつかの再帰的メソッドを実装するラボの割り当て(ポイントはありません)があります。私は与えられた再帰関数に基づいて再帰的方法を完了し、残りの部分について必要な階乗再帰的方法を完了しました。これは現在、私の頭を包み込むのに苦労しているシグマシリーズです。 、このシグマ表記を再帰的メソッドとして「アンロール」するには

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

と私は(1)(5)(私が行くように私の答えを確認するために私のグラフ電卓を使用して)-s Sの結果を書いた:

は、私たちは、この式を与えています私はこの再帰的プロセスを正しく実装する方法を理解するのが難しいです。

私は自分の知る限りで適切に動作する「シグマ」メソッドを構築しています。したがって、私は「フォーミュラ」メソッドに問題があると思います。最悪の場合、数式は正しく(私の思う限り)正しくなり、コードは現在無限ループに陥っています。

// ... Rest of code omitted for brevity 
private static double sequence2(int i) { 
    if (i <= 0) { return 0; } 
    return (sequence2(max - i) - 1)/factorial(i); // max is defined in other code 
} 
private static double sigma(int n) { 
    if (n <= 0) { return 0; } 
    return sequence2(n) + sigma(n - 1); 
} 
private static int factorial(int n) { 
    if (n <= 1) { return 1; } 
    return n * factorial(n - 1); 
} 

この再帰的シーケンスを正しくアンロールする方法はどこから始めるべきですか?

+0

'max'とは何ですか?また、階乗の乗算を除算に変更する理由は何ですか? – nullpointer

+0

それは分裂であると考えられています、それは私の元の公式の公式の誤りです。 'max'は、再帰的メソッドを呼び出す前に検証されるユーザ定義int(min = 1)です。 – studioKeywi

+0

とは何ですか?私は何ですか、あなたは 'max-i'があなたに何を与えると思いますか? – nullpointer

答えて

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; 

このコードd実際にはシグマシーケンスの正しい値が返されますが、再帰的なエクササイズでの動作を駆動するために反復ループを使用しなければならないため、私の心にはやや不満があります。私は新しいメソッドを作成できるかどうかを判断するためにここから抜け出すことになります。再帰的な集計を含めるためにこのメソッドを拡張しますが、当分の間(そして先生自身のコードで)これは正しいです。

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)

+0

これはシリーズを合計しないので、これは正しくありません。例えば、 'n = 2'は' -5/2'に等しくなければなりませんが、あなたの例では '-2'を返します。 – studioKeywi

+0

's(2)'は '(s(2-1)-1)/ 1! '(s(1-1)-1)/ 1!'として展開し、 '-1'の値を返す' +(s(2-2)-1)/ 2! '(0-1)/ 1'なので、' s(2) 'は'(-1-1)/ 1 +(0-1)/ 2'を返し、 '-5/2'を返します。 – studioKeywi

+0

@studioKeywi上記のコードも同様です。あなたは答えの中のシグマ部分を無視しているかもしれません。私はそれがそのままであると信じています。 – nullpointer

関連する問題