将整数值的数组以相反的顺序输出到屏幕上

问题描述 投票:-3回答:2
int main()
{
    int* a;
    int n;
    cout << "Input n: ";
    cin >> n;
    a = new int[n];
    for (int i = 0;i < n;i++) {
        cin >> *(a + i);
    }
    cout << "Integer values reversed in array: " << endl;
    IntegerReversed(a, n);
}
void IntegerReversed(int* a, int n)
{
    if (n < 1) {
        return;
    }
    else {
        cout << a[n - 1] << endl;
        Integer(a, n - 1);
    }
}

这是我的代码。**我想使用递归**

输入

n = 4; 
a[1] = 1, a[2] = 2, a[3] = 3;
a[4] = 4;

我希望我的程序输出为:4 3 2 1。您能帮我解决此代码吗?

c++ recursion
2个回答
0
投票

首先,您需要在main之前定义您的函数,或者至少包括它的签名。其次,如kiner_shah所述,您需要对函数进行正确的调用才能产生递归效果。第三,始终建议您一般避免使用递归函数,除非选择简化实现。因此,这是您与循环相同的功能。

void IntegerReversed(int* a, int n) {
    for (int i=n-1; i>-1; --i) {
        cout << a[i] << endl;
    }
}

并且不要忘记包含'iostream'标头;)

所以您的最终程序可能看起来像这样:

#include <iostream>
using namespace std;

void IntegerReversed(int* a, int n) {
    for (int i=n-1; i>-1; --i) {
        cout << a[i] << endl;
    }
}

int main() {
    int* a;
    int n;
    cout << "Input n: ";
    cin >> n;
    a = new int[n];
    for (int i = 0;i < n;i++) {
        cin >> *(a + i);
    }
    cout << "Integer values reversed in array: " << endl;
    IntegerReversed(a, n);
}



0
投票

首先,使用完之后,您不删除* a便造成了内存泄漏。在delete[] a;函数的末尾添加int main()行。或更好,编写int a[n];,并避免使用指针的创建。您在这里不需要它。

了解动态内存分配,如果您打算很快在其他分配中使用new ...

以相反的顺序显示整数-将else语句更改为:

 else {
        for (int i; i<n; i++) {
           cout << a[ (n-1) - i ] << endl;
        }
 }

祝你好运!

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