我对编程很新,并且想知道这个代码是否也可以被认为是递归,因为它自称。还想知道这是不是很好的做法。
void editArr(int arr[], int arrSize){
int index;
cout << "Enter INDEX: ";
cin >> index;
if(index >= arrSize){
cout << "INDEX is OUT OF BOUNDS" << endl;
editArr(arr, arrSize);
}
cout << "Enter VALUE: ";
cin >> arr[index];
cout << "\n[1] Continue || [0] Exit";
cin >> choiceExit;
if(choiceExit == 1)
editArr(arr, arrSize);
}
答案 0 :(得分:1)
我对编程很新,并想知道这段代码是否也可以被认为是递归,因为它自称。
是的,这就是定义递归的方式。函数直接或间接调用自身。
也想知道这是不错的做法。
一般没有。最好用循环替换代码并使用堆栈(例如std::stack
)。在你的情况下,即使一个简单的循环也可以正常工作。
递归调用依赖于(有限的)内部调用堆栈大小,并且容易溢出调用堆栈。
答案 1 :(得分:1)
函数调用自身,它是递归的。
每次用户选择继续时,程序都会分配一个新的堆栈帧,因为这可能无限期地发生,我想说循环是一个更好的选择。
作为旁注,这个函数是tail recursive(除非给出了OOB索引,然后所有的地狱都松了),所以编译器可能会优化分配额外的堆栈帧,我个人不会依赖虽然如此。
答案 2 :(得分:0)
似乎它会起作用。不要忘记将choiceExit定义为函数顶部的整数。请注意,它不是初始化数组的常用方法,递归有点“重”&#34;。另外值得注意的是,您不需要将Arraysize作为参数,因为大小(Arr)会给它。一个while循环确实会好得多。顺便说一下,ChoiceExit可能是一个布尔值,因为只有两个&#34; case&#34;可能的