質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

10231閲覧

再帰関数で全通り列挙する

user0001

総合スコア13

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/06/13 12:06

再帰関数でn(自然数)桁の二進数を全通り列挙するプログラムを教えてください。

入力例
1
出力例
0
1


入力例
2
出力例
00
01
10
11


入力例
3
出力例
000
001
010
011
100
101
110
111


気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

hichon

総合スコア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

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C++ならばnext_permutationが有効です。再帰ではありませんけど。

投稿2018/06/13 12:09

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2018/06/14 10:21

next_permutationは順列(n!)であって2^nじゃないよ?
HogeAnimalLover

2018/06/14 10:46

はい。それは承知した上で回答していますよ。どのみち、これだけでは再帰ではないですし、単独では要件を満たしません。
user0001

2018/06/16 23:14

もしも2^n通りで単独で動く関数が標準ライブラリに存在するようでしたら教えていただけると有り難いです。
guest

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

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問