掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
再帰関数とは (ID:68196)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
επιστημηさん、そださん、ありがとうございます。 下記のコードを作りました。 HTREEITEM ht にルートのハンドルを入れておいて、 void C***View::OnBnClickedButton1() { saiki(ht); } void C***View::saiki(HTREEITEM ht) { ht = m_tree1.GetNextItem(ha, TVGN_CHILD); if ( ht != NULL ) { saiki(ht); } else {ht = ha; } while(1) { ht = m_tree1.GetNextItem(ht, TVGN_NEXT); if ( ht == NULL ) { ht = m_tree1.GetNextItem(ha, TVGN_PARENT); ht = m_tree1.GetNextItem(ht, TVGN_NEXT); if ( ht == NULL ) {return; } saiki(ht); if ( ht == NULL ) {return; } } saiki(ht); } } これで、ht にノードのハンドルが順番に入ってきました。 ただ、これですと、無限ループになります。 ht が最後のノードのハンドルに出会ったら抜け出す、とか、手段はありそうですが、なんとなくヘンです。 また、saik()の中段で、子がない場合に弟に、進む向きを変えていますが、今までに見た再帰のコードでは、そんな「切り替え」など、やっていなかったように思うのです。 戻り値を使うと、解決しそうに思ったのですが、いろいろ考えても、成功しませんでした。 なんだか固まってしまって、ヒントを頂けませんでしょうか。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.