再帰関数でn(自然数)桁の二進数を全通り列挙するプログラムを教えてください。
入力例
1
出力例
0
1
入力例
2
出力例
00
01
10
11
入力例
3
出力例
000
001
010
011
100
101
110
111
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
C++など不要。そう、シェル芸ならね!
bash
1$ f(){ if [ $1 == 0 ];then echo $2;else f $(($1 -1)) ${2}0;f $(($1 -1)) ${2}1;fi };f 4 20000 30001 40010 50011 60100 70101 80110 90111 101000 111001 121010 131011 141100 151101 161110 171111
投稿2018/06/13 13:33
総合スコア5737
0
ベストアンサー
安易な再帰関数
CPP
1void subBin(string str, int n) 2{ 3 if (n == 0) cout << str << "\n"; 4 if (n > 0) { 5 subBin(str + "0", n - 1); 6 subBin(str + "1", n - 1); 7 } 8} 9
これを
CPP
1string str = ""; 2subBin(str, n); 3
で呼び出す。(n は適当な自然数)
安易すぎですが。
投稿2018/06/13 12:22
総合スコア6383
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
C++ならばnext_permutationが有効です。再帰ではありませんけど。
投稿2018/06/13 12:09
総合スコア4830
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
next_permutationは順列(n!)であって2^nじゃないよ?
2018/06/14 10:46
はい。それは承知した上で回答していますよ。どのみち、これだけでは再帰ではないですし、単独では要件を満たしません。
2018/06/16 23:14
もしも2^n通りで単独で動く関数が標準ライブラリに存在するようでしたら教えていただけると有り難いです。
0
next_permutationを使った例。再帰してないけど。
C++
1#include <iostream> 2#include <string> 3#include <algorithm> 4 5int main() { 6 using namespace std; 7 const int N = 4; 8 string pattern = string(N,'0') + string(N,'1'); // pattern : "00001111" N個の'0'とN個の'1' 9 10 int count = 0; 11 for ( int i = 0; i <= N; ++i ) { 12 // '0'の連続に続いて'1'がi個ある長さNの文字列strに対し 13 // strの文字並びの全組み合わせを列挙する 14 string str = pattern.substr(i,N); 15 do { 16 cout << str << endl; 17 ++count; 18 } while ( next_permutation(str.begin(), str.end()) ); 19 } 20 cout << count << " combinations generated\n"; 21} 22 23/* 実行結果 240000 250001 260010 270100 281000 290011 300101 310110 321001 331010 341100 350111 361011 371101 381110 391111 4016 combinations generated 41*/
投稿2018/06/17 00:48
総合スコア16614
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。