double Najkraci(vector<Tocka> v){
static vector<Tocka> a;
static int broj = 0;
int i;
static double najmanja = 0;
if (broj == 0) { //pocinjemo od rubne tocke
for(std::vector<Tocka>::iterator it = v.begin() ; it != v.end(); ++it){
if (it->x < min) {min = it->x; temp = *it;}
}
a.push_back(temp);
}
if (a.size() == v.size()) {cout <<najmanja; return najmanja;}
i = 0;
min = 1000;
najmanja = najmanja + min;
a.push_back(temp);
//cout << "Hrebak";
//cout << v.size() << ","<< a.size() << endl;
broj++;
najmanja = najmanja + Najkraci(v);
}
int main(){
int n,i;
double a,b;
vector<Tocka> t;
cin >> n;
for(i = 0; i < n; i++) {
cin >> a >> b;
Tocka temp(a,b);
t.push_back(temp);
}
cout << "Najkraci put:" << Najkraci(t);
return 0;
}
代码很乱,可能不会发生它应该做的事情,但我的问题很简单。在函数cout
中返回之前Najkraci
显示的数字与main
中的数字大不相同。怎么了?我删除了一些代码,因为它不允许我发布。
答案 0 :(得分:1)
递归函数存在设计问题。 return语句应该在函数的末尾。
否则只有最后一次调用Najkraci
并返回double
值。所有其他调用都没有返回任何值,因为你已经传递了return语句。
double Najkraci(vector<Tocka> v){
static vector<Tocka> a;
static int broj = 0;
int i;
static double najmanja = 0;
if (broj == 0) {
for(std::vector<Tocka>::iterator it = v.begin() ; it != v.end(); ++it){
if (it->x < min) {min = it->x; temp = *it;}
}
a.push_back(temp);
}
if (a.size() != v.size()) {
i = 0;
min = 1000;
najmanja = najmanja + min;
a.push_back(temp);
//cout << "Hrebak";
//cout << v.size() << ","<< a.size() << endl;
broj++;
najmanja = najmanja + Najkraci(v);
}
cout <<najmanja;
return najmanja;
}