这被认为是递归吗?

时间:2016-12-08 10:12:17

标签: c++ recursion

我对编程很新,并且想知道这个代码是否也可以被认为是递归,因为它自称。还想知道这是不是很好的做法。

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);

}

3 个答案:

答案 0 :(得分:1)

  

我对编程很新,并想知道这段代码是否也可以被认为是递归,因为它自称。

是的,这就是定义递归的方式。函数直接或间接调用自身。

  

也想知道这是不错的做法。

一般没有。最好用循环替换代码并使用堆栈(例如std::stack)。在你的情况下,即使一个简单的循环也可以正常工作。

递归调用依赖于(有限的)内部调用堆栈大小,并且容易溢出调用堆栈。

答案 1 :(得分:1)

函数调用自身,它是递归的。

每次用户选择继续时,程序都会分配一个新的堆栈帧,因为这可能无限期地发生,我想说循环是一个更好的选择。

作为旁注,这个函数是tail recursive(除非给出了OOB索引,然后所有的地狱都松了),所以编译器可能会优化分配额外的堆栈帧,我个人不会依赖虽然如此。

答案 2 :(得分:0)

似乎它会起作用。不要忘记将choiceExit定义为函数顶部的整数。请注意,它不是初始化数组的常用方法,递归有点“重”&#34;。另外值得注意的是,您不需要将Arraysize作为参数,因为大小(Arr)会给它。一个while循环确实会好得多。顺便说一下,ChoiceExit可能是一个布尔值,因为只有两个&#34; case&#34;可能的