编写一个递归函数,它接受一个数组并以相反的顺序显示元素,而不在最后启动数组的索引

时间:2017-06-04 13:25:59

标签: c++ arrays recursion

我的问题是:我这样做是对吗? 因为没人能告诉我......

编写一个递归函数,它接受一个数组并以相反的顺序显示元素 没有在最后启动数组的索引。 (换句话说,不要写相当于 在数组末尾开始打印的循环。)

int bleah(int arr[], int number)
{
    cout << arr[number] << ' ';
    if (number <= 0)
    {
        return 1;
    }
    cout << arr[number] << ' ';
    return bleah(arr, number - 1);
}

int main()
{
    int arr[31] = {0};
    for (int i = 0; i <= 30; i++)
    {
        arr[i] = i;
    }
    bleah(arr, 30);

    cin.get();
    cin.ignore();
    return 0;
}

3 个答案:

答案 0 :(得分:2)

你正在做的就像你不想做的那样。你说你被要求编写一个递归函数,不是从最后开始,而是发送最后一个单元格。

尝试使用这样的递归:

void bleah(int arr[], int number)
{
    if (number != arr.length()-1)
        bleah(arr, number + 1);
    cout << arr[number] << ' ';
}

并称之为:

bleah(arr, 0);

答案 1 :(得分:0)

完整的运行代码(以及main方法)。我知道初学者在开始时有点困难。不要在这里讨厌严厉的评论。 我使用了一个向量而不是传统的数组只是为了让事情更简单和可读:

#include <iostream>
#include <vector>

using namespace std;
//Typedef the vector to a simple name, array
typedef vector<int> array;

//The actual, recursive function
void printReverse(const array arr, const unsigned int index){
    //The base condition of recursion
    if(index != arr.size()){
        printReverse(arr, index+1);
        cout << arr[index] <<" ";
    }
}

int main()
{
    int size;
    cout << "Enter size of the array: ";
    cin >> size;
    array arr;

    cout << "Enter elements: ";
    for(int i=0; i<size; i++){
        int a;
        cin >> a;
        arr.push_back(a); //add the input to the array(or vector)
    }
    //The recursive function call(starting with index 0)
    printReverse(arr, 0);
    return 0;
}

答案 2 :(得分:0)

对不起浪费你时间的人! 我终于得到了答案并在Github上寻找它。 这是正确的答案

void bleah(int arr[], int number)
{
    if (number + 1 < 10)
    {
        bleah(arr, number + 1);
    }
    cout << arr[number] << ' ';
}

int main()
{
    int arr[11] = { 34,5,8,3,6,678,8,87,67,8 };
    for (int i = 0; i < 10; i++)
    {
        cout << arr[i] << ' ';
    }
    cout << endl;
    bleah(arr, 0);

    cin.get();
    cin.ignore();
    return 0;
}