从C ++中的递归void方法退出

时间:2018-07-10 15:58:45

标签: c++

我有一个用c ++编写的递归void方法。得到所需的值后,如何从此递归方法退出。

  #include<bits/stdc++.h>
using namespace std;
    int a[25];
    char x[25];
    int n, m ;
    string s;
    void go(int pos)
    {
        if(pos == n - 1)
        {
            int suma = a[0];
            for(int i = 0 ; i < n - 1;i++)
            {
                if(x[i] == '+')suma += a[i + 1];
                else suma -= a[i + 1];
            }



//here I need hint how to close this method when suma will equal to m
 //if(suma == x) here I should break this method
        return ;


    }
    x[pos] = '+';
    go(pos+1);
    x[pos] = '-';
    go(pos+1);


}

main()
{

    cin >> n >> m;
    for(int i = 0 ; i < n;i++)
        cin >> a[i];
    go(0);
    for(int i = 0 ; i < n- 1;i++)
        cout << x[i]<<" ";



}

当我的总和等于x数据时,我需要提示如何打破void方法,一切都被声明了,请问您是否知道关闭此方法的提示,我应该获得x数组的值。

2 个答案:

答案 0 :(得分:1)

扔到找到结果的地方,并赶到最初的呼叫站点

#include <string>
#include <iostream>

int a[25];
char x[25];
int n, m ;
std::string s;

struct result_found{};

void go(int pos)
{
    if(pos == n - 1)
    {
        int suma = a[0];
        for(int i = 0; i < n - 1; i++)
        {
            if(x[i] == '+')suma += a[i + 1];
            else suma -= a[i + 1];
        }
        if (suma == m)
            throw result_found{};
    }
    x[pos] = '+';
    go(pos+1);
    x[pos] = '-';
    go(pos+1);
}

main()
{
    std::cin >> n >> m;
    for(int i = 0 ; i < n;i++)
        std::cin >> a[i];
    try {
        go(0);
    }
    catch (result_found&) {}
    for(int i = 0 ; i < n- 1;i++)
        std::cout << x[i] << " ";
}

答案 1 :(得分:-1)

您可以在该方法上使用“静态布尔”标志。 函数上的静态字段将其值保留在多个函数调用之间。

void go(int pos)
{
    static bool found=false;
    if (found) return;

    //rest of your code here...
    //of course when you found what are you searching, do found = true;

}