C++ 对于调用自身的函数(嵌套函数)

C++ 对于调用自身的函数(嵌套函数),c++,nested,nested-loops,C++,Nested,Nested Loops,我以样品的形式表达我的意见。。。 若我们输入像{a,b,c,d}这样的a序列,若我们选择每个子序列3的元素数,它应该输出。。。 a、 b,c | a,b,d | a,c,d | b,c,d。。。。请注意,这种安排很重要(我使用的是数组),它的某种输出是包含序列中3个元素的整个子集 #include <iostream> #include <conio.h> #include <windows.h> int p = 0, q = 0, i; void alli

我以样品的形式表达我的意见。。。 若我们输入像{a,b,c,d}这样的a序列,若我们选择每个子序列3的元素数,它应该输出。。。 a、 b,c | a,b,d | a,c,d | b,c,d。。。。请注意,这种安排很重要(我使用的是数组),它的某种输出是包含序列中3个元素的整个子集

#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;
}

我认为它没有存储最后一个i…

我看到的主要问题是您正在修改
main
中的全局变量
i
,以及
allinone

处理递归函数时,最好将用于终止递归的变量值作为参数传递给函数

我稍微更新了您的代码,使递归更进一步。然而,它并非一路完美。它产生如下输出:

2 3 3
我会让你知道最后一点


#包括
//不要对使用的变量使用全局变量
//终止递归。
//int p=0,q=0,i;
void allinone(int thing[],int n,int p,int sub,int tek[],int sum[]))
{
int q=p;

对于(inti=p;我知道p和q在我的代码中是重复的,但我需要p来表示另一部分,我没有在其中写出来……我实际上没有得到向下的声音……我真的没有得到你的第一个声音line@Parano,全局变量通常是有问题的。如果您能找出如何避免使用t哼哼。@Parano,你是说注释掉的那一行吗?
//int p=0,q=0,i;?我是说……int q=p;
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;
}