我已经开始研究递归,现在正尝试将其投入实际应用,而不会出现堆栈溢出(或再次执行斐波那契数列!双关语。
在我的示例中,我循环遍历一组相似的项目,直到有机会该元素是唯一的。任务完成。 对于任何递归函数,您是否始终需要基本情况和递归情况以及终止条件?我想不出这个例子的基本情况。
var myArray = ["bananas", "bananas", "bananas", "bananas", "Gwen Stefani!"];
var tries = 0;
alert(getIt(myArray, tries));
function getIt(arr, num)
{
r = Math.floor(Math.random()* arr.length);
// Base case
// something here??
// but only if we don't need to call
// the recursive function
// termination case
if (arr[r] != "bananas")
{
alert("Found on attempt " + num);
return arr[r];
}
// Recursive case
return getIt(arr, num+1);
}
最佳答案
这取决于您使用的术语,但是 http://en.wikipedia.org/wiki/Recursion_%28computer_science%29#Recursive_functions_and_algorithms (例如)的基本情况和终止情况含义相同。在您的代码中,终止情况是基本情况,因为它是产生结果的原因。
作为旁注,您可以这样做:
alert(getIt(myArray, 0));
而不是这个:
var tries = 0;
alert(getIt(myArray, tries));
关于javascript - 递归条件 - 缺少基本情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23337218/