用等分和逆法反转向量的元素

问题描述 投票:-1回答:1

我尝试通过除法和impera算法反转向量。这是我的代码:

#include <iostream>
#include <vector>

using namespace std;

//prototype
void Reverse (std::vector<int> &v, int left, int right);

//helper function
void Switch(int &x, int &y)
{
int aux = x;
x = y;
y = aux;
}


int main()
{
vector <int> v;

int n; cout << "n="; cin >> n;
for (int i = 0; i < n; i++){
    cout << "v[" << i <<"]=";
    int input;
    cin >> input;

    v.push_back(input);
}

Reverse(v, 0, v.size()-1);

for (int i = 0; i < n; i++)
    cout << v[i] << " ";

return 0;
}


void Reverse (std::vector<int> &v, int left, int right)
{
int mid = (left + right) / 2;

if (left == right + 1){
    Switch(v[left], v[right]);
}
else{
    Reverse(v, left, mid-1);
    Reverse(v, mid, right);
}
}

它可能给我一个无限循环,因为我的程序在编译时永远不会返回,并且会得到不响应的错误。有什么问题吗?是因为我只在基本情况下切换了两个元素,而不是两个完整的向量?

c++ recursion reverse divide-and-conquer
1个回答
0
投票

您应该调试程序,而不是要求社区为您修复它。

您似乎已经知道cout的最简单方法是在程序状态下添加更多打印语句。稍后,您可能将学习如何在所选的IDE中使用调试器。

© www.soinside.com 2019 - 2024. All rights reserved.