2016-05-30 10 views
0

(これは既に答えられているようですが、私はもっと具体的なものを探しています)学校での作業のために、2 * 1のドミノタイルで長方形をタイル張りにするさまざまな方法を計算するメソッドを書く必要があります。私が見ることのできるところから、それはフィボナッチ数であろう。私はコンパイラでコンパイルされたコードを書いたが、本当に意味をなさないか、ここからどこに行くのかは分からない。これをよりうまく実装するにはどうすればいいですか?フィボナッチを使用してドミノタイルにさまざまな方法を計算する方法は?

public static int domino(int n, int m) // the method signature is what I must use according the hw instructions 
{ 
int area = n*m; // calculating the area of the passed in rectangle 
int dominoes = area/2; // calculating how many dominos will be needed to cover the area 
if (dominoes<=2) { // because fib 1 equals 1 and fib 2 equals 1 
    return 1; 
} //also the stopping point 
else {return domino(dominoes-1, 0) + domino(dominoes-2, 0);} 
} 

私はこの宿題の効率について心配する必要はありません。

+0

:これは0

が私のアドバイスは、余分なフィボナッチそうのような機能を使用することです等しい0で何かを掛けると面積を計算することは、常に0になりことを意味します私はあなたのユースケースを理解するのに苦労しているのでもう少しです。 – TheBakker

+0

ユースケースはどういう意味ですか?私は、適切な再帰的な方法を記述しようとしていますが、それを正しく行う方法については固執しています。 – user1454994

答えて

1

再帰呼び出しを使用してフィボナッチ数を正しく計算していません。あなたは実行されています

else {return domino(dominoes-1, 0) + domino(dominoes-2, 0);} 

をので、基本的に、最初の再帰呼び出しn == (dominoes - 1)m == 0に。私はあなたがあなたの必要性を説明する必要があると思う

public static int domino(int n, int m) { 
    // return the fibonacci number of the number of dominoes in the given rectangle 
    return fib((n * m)/2); 
} 

public static int fib(int n) { 
    if(n <= 2) 
     // seed values of the fibonacci sequence 
     return 1; 
    else 
     return fib(n - 1) + fib(n - 2); 
} 
+0

ありがとうございます。それは私が考えていたものです。しかし、私が指示を正しく理解していれば、宿題のヘルパーメソッドを使うことはできません。 – user1454994

+1

まあ、再帰的にではなくフィボナッチを反復的に簡単に実装することもできます。その後、ヘルパー機能は必要ありません。または、あなたはすでに持っている関数を使うことができますが、私が上で述べた呼び出しで '0'を置き換えて、何か他のものに置き換えれば、0の領域にはなりません。ヒント:何によって数を乗算し、結果と同じ数を得ることができますか? – Sarek

+0

宿題は具体的には再帰を練習することです。しかし、そのヒントは素晴らしいです!私は自分の方法で何かがあることを知っていた、これは私が必要なものです。 – user1454994

関連する問題