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

Recursive function, which writes integer digits in an array(vector) in C++?

我有一个 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;
    }

我可以看到几个原因:

  1. 没有条件停止回避,因此它会继续进行,直到用完堆栈或内存。我想你想在 num 为零时停止
  2. fill_Array 没有 return 值,因此将为 temp 分配一些随机值,该值将被推入数组

还有为什么要使用递归,因为迭代会更容易,更明显它在做什么

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

#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;
}