循环通过递归动作的振荡

时间:2017-04-25 03:36:48

标签: c++ oop recursion

我的问题是我的基本情况永远不会执行,因为循环是运行应用程序的主要组件,不会执行。我正在考虑制作一个嵌入式for循环,但是,我想不出让for循环从最大矢量位置振荡到最小矢量位置的方法。另外,在查看之前要注意的一件小事是v3包含对象A和B,因为对象C是A和B的超类。

MCVE版本:http://coliru.stacked-crooked.com/a/c6fdc017118e98f2

    void Obj::objhelper()
    {

        recurisivehelper();


        if ((v1[0].getx() == 0 && v2[0].getx() > 0) ||
            (v1[0].getx() > 0 && v2[0].getx() == 0))
        {
            if (v1[0].getx() == 0 && v2[0].getx() > 0)
            {
                print(3);
                return;
            }else
            {
                print(4);
                return;
            }
        }

        else if(v1[0].getx() > 0 && v2[0].getx() > 0)
        {
            objhelper();
        }

        return;
    }

//This method is not touched
//This is a recursive helper method of the helper method of the main method
    void Obj::recursivehelper()
    {

        for (int i = 0; i < 2; i++) {

            if (v3[i].gety() == "str1" ||
                v3[i].gety() == "str2" ||
                v3[i].gety() == "str3")
            {
                int temp = 0;

                Obj1 obj(v1,:v2);
                obj.display();

                v3[i].doa(v3[i + 1]);

                obj.display();
                v2[0]--;
            }else if (v3[i].gety() == "str4" ||
                      v3[i].gety() == "str5"   ||
                      v3[i].gety() == "str6"  )
            {

                Obj1 obj(v1,sv2);
                obj.display();

               v3[i].doa(v3[i + 1]);


                obj.display();
                v1[0]--;
            }
        }

        return;
    }

1 个答案:

答案 0 :(得分:0)

传递参数by valuepassing by reference不同。

这是有问题的部分: -

void recursivehelper(std::vector<int>v1, std::vector<int>v2, std::vector<std::string>v3) {
    ....
        v1[0]--;   //<-- modify internal copy
        v2[0]--;
    ...
    return;
}

v1[0]--;v2[0]--;行修改v1v2复制,实际上不会影响v1v2调用者(recursivefunc())的观点。

使其按预期工作的一种简单方法是通过引用传递。

更改声明和实现的签名
void recursivefunc(std::vector<int>, std::vector<int>, std::vector<std::string>);
void recursivehelper(std::vector<int>, std::vector<int>, std::vector<std::string>);

void recursivefunc(std::vector<int>&, std::vector<int>&, std::vector<std::string>&);
void recursivehelper(std::vector<int>&, std::vector<int>&, std::vector<std::string>&);

这是demo