递归函数,它在 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;
}
我可以看到几个原因:
- 没有条件停止回避,因此它会继续进行,直到用完堆栈或内存。我想你想在 num 为零时停止
- 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;
}
我有一个 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;
}
我可以看到几个原因:
- 没有条件停止回避,因此它会继续进行,直到用完堆栈或内存。我想你想在 num 为零时停止
- 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;
}