私はこの1つの関数def friends(self, name, degree):
を使用して再帰関数を頭に入れようとしています。この1つの目的は、すべての友人の集合を特定の程度まで(アドレス帳のために)返すことです。それはclass SocialAddressBook:
と呼ばれる大きなクラスの最後の部分です。このクラスの「程度」は、ユーザーが友人の友人に「質問」することを可能にします。度1は直接の友人であり、次数2は友人の友人であり、以下同様です。再帰的に設定を追加する
推移友情::私が持っているコードはまた、いくつかのより多くのコンテキストこの上の私の知識が行く限りで
def friends(self, name, degree): fs = set() if degree == 0: return set() if degree == 1:
.... ある
Fred → Barb → Jane → Emma → Lisa
Fred → Sue
Jane → Mary
と私のテストは:a.friends('Fred', 1) == {'Barb', 'Sue'}
です。
a.friends('Fred', 3) == {'Mary', 'Barb', 'Jane', 'Sue', 'Emma'}
a.friends('Fred', 4) == {'Barb', 'Emma', 'Mary', 'Lisa', 'Sue', 'Jane'}
それだけで私はそれがに上がる度を知っているので、SO、私も再帰的にまたはちょうどこれを手動で行う必要がある度4
に上がりますか?
。
誰かがこれを再帰的に完了する方法について正しい方向で私を指すことができれば、それはすばらしいでしょう、ありがとう!
直接質問には回答しませんが、これは(ストレージとしてのキューを使用して)Googleの「幅広い最初の検索」をお勧めします。再帰は深度の最初の検索(コールスタックを「ストレージ」として使用)に適しています。 – wim
私はあなたがここで何を求めているのか完全にはわかっていない、多分あなたは私のために精巧にすることができます。しかし、私はあなたが探している答えは「再帰的にはメモリ上のものではないだろう」(再帰的に高速化する一方で、数ギガバイトのデータを持たない限り、これは本当に重要ではない)だから私はあなたが大量のデータを持っていない限り、あなたはマニュアル辞書を持っていることをお勧めします。 –
@PrestonHager hmmmこのケースで再帰を使用する方法についてはほとんど混乱していると思います(テストケースをハードコードすることができないので、私はより簡潔に編集します)。しかし、ええ、メモリやスピードは、この場合、実際問題ではありません。 – plshalp