2016-09-15 5 views
0

この問題の解決には、再帰時に非常に悪いです。私はこれを行う方法を記述する必要があり:Javaで再帰的にシーケンスを定義する

入力変数Xは、機能1と50の間の整数であり、Yようによって再帰的に定義された配列のX番目のタームを返すべきである:

f(1) = 1 f(2) = 3 f(X) = 2*f(X-1) – 2*f(X-2) for X = 3,4,5,...

関数コードで再帰(ループではありません)を使用する必要があります。

TBH私はどこから始めるべきか知りません。どんな助けもありがとう。ここに私の現在のコードは次のとおりです。

package p1parta; 

import java.util.Scanner; 

public class RecursiveSeq 
{ 
    public static void main(String args[]) 
    { 
     System.out.println("Please enter a number:"); 
     Scanner input = new Scanner(System.in); 

     int x = input.nextInt(); 

     System.out.println(sequence(x)); 
    } 

    public static int sequence(int x) 
    { 
     if(x == 1){ 
      return 1; 
     } 
     if (x == 2){ 
      return 3; 
     } 
     return 2 * sequence(x - 1) - 2 * sequence(x - 2); 
    } 
} 

私が示した解決策を実装しようとしたが、私はプログラムからの取得の出力は私が手で計算していたものと一致しません。実際には入力3,4,5、および6をテストしています。一致する唯一のものは5

+0

基本ケースの実装から始めます。「xが1なら1を返し、2なら3を返します。次に、再帰的なステップを実装します。そうでなければ、2 * f(X-1) - 2 * f(X-2)を返します。それよりも、この問題は、あなたが問題を抱えているコンセプトのどれを私たちに教えてくれないので、広いです。 – yshavit

+0

あなたが期待しているものとあなたが得ているものを挙げてください。たとえば、入力3の場合、アルゴリズムは2 * 3 - 2 * 1 = 4を返します。入力3の場合、4が間違った結果であると思っていますか?あなたはそれから何を期待しましたか? –

+0

あなた自身でこれをデバッグしようとしたことはありません。あなた自身のデバッグの努力を示していない限り、スタックオーバーフローはあなたのためのプログラムをデバッグしません。 https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ –

答えて

2

です。この問題は再帰の最適な使用例です。一般的には再帰的なパターンは次のとおりです。

func(context) 
    if simple case 
     return simple answer 
    else 
     call func(simpler context) 
     and return combined results 

は、このパターンを使用して実装するに行くと、あなたは問題がある場合戻って来ました。

+0

私はこのソリューションを実装しようとしましたが、私がプログラムから得た出力は私が手で計算しているものと一致しません。実際には、入力3,4,5、および6をテストしています。一致する唯一のものは、公正な点である5、 – GrumpyWizard

+1

@yshavitです。コードを削除してヒントを残しておきます – sprinter

+0

@ GrumpyWizard自分で実装してデバッグしてから、うまく動作しない場合は質問に戻ってください。 – sprinter

関連する問題