#include <iostream>
void myFunction( int j, int N, std:: string padding) {
std:: cout << padding << "j:" << j << ", N:" << N << "\n " ;
if ( j == N) {
std:: cout << "j == N, stopping\n " ;
return ;
}
std:: cout << padding << "for (i = " << j + 1 << "; i < " << N << ")\n " ;
for ( int i = j + 1 ; i < N ; ++ i) {
std:: cout << padding << "loop iter with i = " << i << "\n " ;
myFunction( i, N, padding + "| " ) ;
}
std:: cout << padding << "reached 'N' at this level, returning\n " ;
}
int main( ) {
myFunction( 0 , 3 , "" ) ;
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KCnZvaWQgbXlGdW5jdGlvbihpbnQgaiwgaW50IE4sIHN0ZDo6c3RyaW5nIHBhZGRpbmcpewoJc3RkOjpjb3V0IDw8IHBhZGRpbmcgPDwgImo6IiA8PCBqIDw8ICIsIE46IiA8PCBOIDw8ICJcbiI7CiAgICBpZihqID09IE4pIHsKICAgIAlzdGQ6OmNvdXQgPDwgImogPT0gTiwgc3RvcHBpbmdcbiI7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgc3RkOjpjb3V0IDw8IHBhZGRpbmcgPDwgImZvciAoaSA9ICIgPDwgaiArIDEgPDwgIjsgaSA8ICIgPDwgTiA8PCAiKVxuIjsKICAgIGZvcihpbnQgaSA9IGogKzEgOyBpIDwgTiA7ICsraSl7CiAgICAJc3RkOjpjb3V0IDw8IHBhZGRpbmcgPDwgImxvb3AgaXRlciB3aXRoIGkgPSAiIDw8IGkgPDwgIlxuIjsKICAgICAgICBteUZ1bmN0aW9uKGksIE4sIHBhZGRpbmcgKyAifCAiKTsKICAgIH0KICAgIHN0ZDo6Y291dCA8PCBwYWRkaW5nIDw8ICJyZWFjaGVkICdOJyBhdCB0aGlzIGxldmVsLCByZXR1cm5pbmdcbiI7Cn0KCiAgICBpbnQgbWFpbigpIHsKICAgICAgICBteUZ1bmN0aW9uKDAsIDMsICIiKTsKICAgIH0K
stdout
j:0, N:3
for (i = 1; i < 3)
loop iter with i = 1
| j:1, N:3
| for (i = 2; i < 3)
| loop iter with i = 2
| | j:2, N:3
| | for (i = 3; i < 3)
| | reached 'N' at this level, returning
| reached 'N' at this level, returning
loop iter with i = 2
| j:2, N:3
| for (i = 3; i < 3)
| reached 'N' at this level, returning
reached 'N' at this level, returning