返回前的cout显示的数字与主要数字大不相同

时间:2015-03-12 18:39:58

标签: c++

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中的数字大不相同。怎么了?我删除了一些代码,因为它不允许我发布。

1 个答案:

答案 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;
}