>>138
再帰なんか要らないよ
切り替えも簡単

幅優先:
O = 空リスト
Oにコピー元を入れる
while (Oが空でない) {
 n = Oの先頭のファイル
 if (nがディレクトリ) {
  コピー先にnを作る
  nの子を全部Oの末尾に追加
 } else
  nをコピー
}

深さ優先:
O = 空リスト
Oにコピー元を入れる
while (Oが空でない) {
 n = Oの先頭のファイル
 if (nがディレクトリ) {
  コピー先にnを作る
  nの子を全部Oの先頭に追加
 } else
  nをコピー
}