递归函数,它在C ++中的数组(向量)中写入整数位?

时间:2018-01-20 17:17:21

标签: c++ recursion counting digits

我有一个C ++程序,我必须创建一个递归函数,将一个给定正整数的所有数字写入一个数组 - 在本例中是一个向量。 但是,当我编译程序并输入一个数字时,它就会停止工作。我想问为什么会这样?

    #include <iostream>
    #include <vector>
    using namespace std;
    vector <int> arr;
    int temp;
    int fill_Array(int num)
    {
        if(num>=1 && num<=9)
        {
            arr.push_back(num);
        }

        temp = fill_Array(num)%10;
        arr.push_back(temp);
        num/=10;

    }
    int main()
    {
        int n;
        cin>>n;
        fill_Array(n);
        for(int i=0; i<arr.size(); i++)
        {
            cout<<arr[i]<<endl;
        }

        return 0;
    }

2 个答案:

答案 0 :(得分:2)

我可以看到几个原因:

  1. 没有条件来阻止重复,所以它会一直持续到堆栈或内存耗尽为止。我认为你想在num为零时停止
  2. fill_Array没有返回值,因此将为temp赋予一些随机值,该值将被推送到数组中
  3. 另外,为什么在迭代会更简单,更明显地做什么时使用递归

答案 1 :(得分:2)

在给定的代码中,递归函数不返回任何值,因此该函数的返回类型没有用处。 调用函数进行递归是在错误的地方。正确的代码如下:

#include <iostream>
#include <vector>
using namespace std;
vector <int> arr;
int temp;
void fill_Array(int num)
{
    if(num>=1 && num<=9)
    {
        arr.push_back(num);
    }
    else{
        temp = num%10;
        arr.push_back(temp);
        fill_Array(num/=10);
    }
}
int main()
{
    int n;
    cin>>n;
    fill_Array(n);
    for(int i=0; i<arr.size(); i++)
    {
        cout<<arr[i]<<endl;
    }

    return 0;
}