2017-11-02 9 views
2

これは私のプログラミングIIクラスの段階的割り当てです。私は一般的に新しいプログラミングの概念を非常に簡単に受け入れてきましたが、再帰に関するこの特定の割り当ては本当に私を投げています。正しい方向にいくつかの良い振る舞いを探しています。以下は、私が現在持っている譲渡慣習とコードです。宿題:Javaでのマジック植物再帰演習

マジック工場

我々はそれが植えされると、それは最初の年に2葉が発芽し、成長する魔法の植物を持っています。それは3年毎にその葉を3倍にすることを除いて毎年その葉を倍増させる。ような何か:

Link to table displayed in my homework document

は、次のメソッドが含まれMagicPlantというクラスを書く:

  • 植物の年齢
  • 不特定の葉の数を返すメソッドを - 葉数を指定して植物の年齢を返す再帰的なメソッド。
  • 葉の数を指定して、植物の年齢を返す再帰的なメソッド。

ドライバクラスでは、メソッドをテストします。

アルゴリズムとデータ構造で処理できる最大(最古の)プラントは何ですか。


私が与えられたと私は二番目に泥だらけの最後の箇条書きのトラブルだけでなく、ビットを抱えているものです

(しかし、私は仕事に思えるのコードを持っています)。

それだけで文を呼び出していますので、ドライバクラスを除く私の現在のコード:

public class MagicPlant { 

    // Method that returns the number of leaves given 
    // the age of the plant. 
    public int getLeaves(int age) { 
     int leafCount = 1; 
     for (int i = 1; i <= age; i++) { 
      if (i % 3 != 0) { 
       leafCount *= 2; 
      } else { 
       leafCount *= 3; 
      } 
     } 
     return leafCount; 
    } 

    // Non-recursive method that returns the age of the plant 
    // given the number of leaves. 
    public int getAgeNR(int leaves) { 
     int age = 1; 
     while (leaves > getLeaves(age)) { 
      age++; 
     } 
     return age; 
    } 

    // Recursive method that returns the age of the plant 
    // given the number of leaves. 
    public int getAgeR(int leaves) { 
     return 0; 
    } 
} 
+0

、我々はこの演習に精通している信じられないかもしれません:

また、私はあなたが再帰のための2つの方法が作ることを示唆しています。ここ数日で少なくとも2回前に質問がポップアップしています。 – Kayaman

+0

@Kayaman非常によく私のクラスから来るかもしれない。ハハ。私は検索から何も見つかりませんでした。 – Aphemra

+0

年齢に直接当てはまらない数字をあてるとどうなりますか? – Lino

答えて

1

私のtippはwhile -loopを再帰で置き換えることです。したがって、ローカル変数を持たず、代わりにその変数をメソッドに戻します(再帰的)。

public int getAgeR(int leaves){ 
    return getAgeR(1, leaves); // call overload with initial value 
} 

private int getAgeR(int age, int leaves){ 
    // do your magic here 
} 
+0

私は正しい答えとしてこれを選びました。なぜなら、これはちょうど答えだけではなく、ちょっとしたことだからです。 Skeithの答えは駄目ですが、投稿される前にそれを把握することができました。ほんとありがと! – Aphemra

+1

@Nic glad私は助けることができる:) – Lino

0
// Recursive method that returns the age of the plant 
// given the number of leaves. 
public int getAgeR(int leaves) { 
    if(leaves == 2) { 
     return 1; 
    } 
    if(leaves % 3 == 0) { 
     return getAgeR(leaves/3)+1;   
    } else { 
     return getAgeR(leaves/2)+1; 
    } 
} 

それは数える年の逆です。初めから始めるのではなく、終わりから始めて繰り返しループごとに減らさなければなりません。

+2

なぜ彼の宿題はありますか?彼がちょうど解決を得れば彼を助けません – Lino

+0

答えのおかげで、私は答えの代わりにナッジを完全に求めましたが、私はこれを解剖して理解することができました。 – Aphemra