私は、親が子をスポンサーする場合、ノードが子であるツリーである階層的な組織を持っています。私がちょうどこの再帰をより効率的に書くことはできますか?
downline=user.get_team(user, [])
によって、私は、ユーザーの組織を得ることができます上記を使用して、このコード
def get_team(self, person, team):
firstline = User.query(User.sponsor == person.key).fetch(99999999)
if firstline:
for person in firstline:
team.append(person)
newdownline = self.downline(person, team)
return team
とツリーをたどることができそうです。しかし、私はこれをしなければならないので、そこには、より効率的な方法であります1回のリクエストで何度も何度も再帰が不十分なことがありますか?それとも、ツリーを正しくトラバースできるので、コードはうまくいくのでしょうか?私の最初のバージョンでは、私は三つの変数を使用し、私が代わりにこれの2つの変数のみにコードを並べ替えることができた:私はteamlist変数が本当に必要でないことが判っ
def downline(self, person, team, teamlist):
firstline = User.query(User.sponsor == person.key).fetch(99999999)
if firstline:
for person in firstline:
teamlist.append(person)
newdownline = self.downline(person, team, teamlist)
team.append(newdownline)
return teamlist
ので、私はそれを削除しました。はい、それを行うには、より効率的な方法は、あなたの計算のトレードオフに応じて、そこにある
people = user.downline(user, [], [])
再帰はどこですか? 'firstline'の反復を意味しましたか? –
newdownline = self.downline(人、チーム、チームリスト –
'self'key'と比較して' person'引数を取り除き、ループ内で 'person.downline'を呼び出すことで読みやすさを最適化することができます。あなたは本当に再帰がボトルネックですか? –