I broadcast your function and I got the following
#include <iostream>
#include <list>
#include <iterator>
void arrangements( std::list<char> l, std::list<char> f, size_t k )
{
if ( k == 0 )
{
for ( char c : l ) std::cout << c << ' ';
std::cout << std::endl;
}
else
{
for ( auto it = f.begin(); it != f.end(); ++it )
{
std::list<char> g( f.begin(), it );
g.insert( g.end(), std::next( it ), f.end() );
std::list<char> l2( l );
l2.push_back( *it );
arrangements( l2, g , k-1 );
}
}
}
int main()
{
std::list<char> f = { 'A', 'B', 'C', 'D' };
arrangements( std::list<char>(), f, 2 );
}
Program exit
A B
A C
A D
B A
B C
B D
C A
C B
C D
D A
D B
D C
I do not know what you want to receive.
If, to call a function with k equal to 3, the program output will be
A B C
A B D
A C B
A C D
A D B
A D C
B A C
B A D
B C A
B C D
B D A
B D C
C A B
C A D
C B A
C B D
C D A
C D B
D A B
D A C
D B A
D B C
D C A
D C B
source
share