2015-09-08 4 views
-4

Я расскажу свое мнение по образцу ... , если мы вводим последовательность, подобную {a, b, c, d}, и если мы выберем число элементов из каждая подпоследовательность 3 должна быть выводимой ... a, b, c | a, b, d | a, c, d | б, в, г ...., обратите внимание, что расположение имеет важное значение (я использую массив) некоторый его вид продукции в целом подмножество, которые содержат 3 элемента последовательности ....для функции, называющей ее self (вложенной функцией)

#include <iostream> 
#include <conio.h> 
#include <windows.h> 

int p = 0, q = 0, i; 
void allinone(int thing[], int n, int sub, int tek[], int sum[]) 
{ 
    for (i = p;i <= n - sub + p;i++) 
    { 
     tek[q] = thing[i]; 
     if (p < sub - 1) 
     { 
      ++q; 
      ++p; 
      allinone(thing, n, sub, tek, sum); 
     } 
     if (q == (sub - 1)) 
     { 
      for (auto out_p = 0;out_p <= p;out_p++) 
       std::cout << tek[out_p] << "\t"; 
      std::cout << "\n"; 
     } 
    } 
    --q; 
    return; // not need 
} 
int main() 
{ 
    constexpr int n=5, sub=3; //delete the constexpr if ur compiler is mingw 
    /*std::cout << "enter array len : "; //add this if ur compiler is mingw 
    std::cin >> n; // number of elements in sequence 
    std::cout << "enter sub that u want: "; 
    std::cin >> sub;*/ // subset 
    int sum[sub], tek[sub], thing[n]; 
    for (i = 0;i <= n - 1;i++) 
     std::cin >> thing[i]; 
    allinone(thing, n, sub, tek, sum); 
    _getch(); 
    return 0; 
} 

, какая часть это делает программу не вернуться к предыдущей функции ...

см ниже шаги ...

я думаю, что проблема сделала мою мысль, что обещания

#allinone1 
first for pormise me it will do this for the i=0,1  
{ 
doing for i=1{ 
sequence{a,b,c,d} thing[0]=a,thing[1]=b,thing[2]=c,thing[3]=d 
tek[0] = a ... go into if ... p=1 , q=1 ... and again its going into the #allinone2 ... 
now in the for its promise me to do this for i=1,2 
{ 
doing for i=1 
tek[1]= b ... go into if ... p=2 ,q=2 ... and again its going to #allinone3 
another for its promise me to do this with i=2,3 
{ 
doing for i=2 
tek[2]= c .. go into the output if ... output a b c 
doing for i=3 
tek[2]= d .. go into output if ... output a d d 
}get out of for 
q=1 
end of the allinone3 
go into allinone 2 for 
q is not 2 ... 
doing for i=2 // i think this part made the problem .... 
and ... 

я думаю его не сто ring the last i's ...

ответ

0

Основная проблема, которую я вижу в том, что вы изменяете глобальную переменную i в main, а также allinone.

Когда вы имеете дело с рекурсивными функциями, лучше передать значения переменных, которые используются для завершения рекурсии в качестве аргументов функции.

Я немного обновил ваш код, чтобы сделать рекурсию еще немного. Тем не менее, это не идеально. Он производит выходные данные:

2 3 3 

Я позволю вам выяснить окончательный бит.


#include <iostream> 

// Don't use global variables for variables that are used 
// to terminate recursion. 
// int p = 0, q = 0, i; 

void allinone(int thing[], int n, int p, int sub, int tek[], int sum[]) 
{ 
    int q = p; 
    for (int i = p; i <= n - sub + p; i++) 
    { 
     tek[q] = thing[i]; 
     if (p < sub - 1) 
     { 
      allinone(thing, n, p+1, sub, tek, sum); 
     } 
     if (q == (sub - 1)) 
     { 
      for (auto out_p = 0;out_p <= p;out_p++) 
       std::cout << tek[out_p] << "\t"; 
      std::cout << "\n"; 
     } 
    } 
} 


int main() 
{ 
    constexpr int n=5, sub=3; //delete the constexpr if ur compiler is mingw 
    /*std::cout << "enter array len : "; //add this if ur compiler is mingw 
    std::cin >> n; // number of elements in sequence 
    std::cout << "enter sub that u want: "; 
    std::cin >> sub;*/ // subset 
    int sum[sub], tek[sub], thing[n]; 
    for (int i = 0;i <= n - 1;i++) 
     std::cin >> thing[i]; 
    allinone(thing, n, 0, sub, tek, sum); 
    return 0; 
} 
+0

я знаю о р и д являются дубликатом в этом моем коде, но это мне нужно для р другой части этого, что я не пишу, что в нем ... Я на самом деле не получить вниз голосования .. – Parano

+0

я действительно не получаю ур первой строки – Parano

+1

@Parano, глобальные переменные, в общем, проблематично. Это будет полезно для вас, если вы сможете понять, как избежать их использования. –

Смежные вопросы