我有一个用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数组的值。
答案 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;
}