我已经把我的脑袋缠绕在递归上,现在我正试图将它放入实际应用程序而不会出现堆栈溢出(或者再次执行Fibonacci序列!Pun意图。
在我的例子中,我循环了一系列相似的项目,直到赎金机会元素是唯一的。任务完成。 你总是需要一个基本案例和任何递归函数的递归情况和终止条件??我无法想到这个例子的基本情况。
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);
}
答案 0 :(得分: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));