掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
再帰関数とは (ID:68204)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
void C***View::saiki(HTREEITEM ha) { do_something(ht); /* 何か必要な処理を行なう */ HTREEITEM ht = m_tree1.GetNextItem(ha, TVGN_CHILD); /* 子供ノードを取得 */ while(ht) { saiki(ht); ht = m_tree1.GetNextItem(ht, TVGN_NEXT); /* 子供の兄弟を取得 */ } } これだけの事でしょ。 質問者の間違いは再帰関数の中でローカルに変数を宣言していないこと! あと、子供の処理が終わったら「親に戻って」次の子供を処理しようと考えるのも間違い。 再帰で処理する場合、自分の子供だけを処理すればいいんです。 自分の子供の面倒を見たら、後は自分の親に任せるんです。そうすれば自分の親が 兄弟の面倒をみてくれます。 > 関数を入れ子にするのは理解できるのですが、この時、関数は、どのような働きをしているのでしょうか。 下記のツリー: 親(a)-+-長男(b)-+-長男(c)-+-長男(d) | | +-次男(e) | +-次男(f)-+-長男(g) | +-次男(h) +-次男(i)-+-長男(j)-+-長男(k) | +-次男(l) +-次男(m)-+-長男(n) +-次男(o) で void C***View::OnBnClickedButton1() { saiki(親); } とすると do_something(ht); はa,b,c,d,e,,,とアルファベット順に処理します。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.