泉州网站建设方案维护,页面设计的线条,微信公众号登录入口在哪,地方文明网站建设措施递归是一种用于解决计算机问题的技术#xff0c;方法是创建一个调用自身的函数#xff0c;直到程序达到预期的结果。
递归函数示例
举个简单的例子#xff1a;
假设有个记录数字1-5的函数#xff0c;如下所示#xff1a;
function log(num){if(num 5){return;}co…递归是一种用于解决计算机问题的技术方法是创建一个调用自身的函数直到程序达到预期的结果。
递归函数示例
举个简单的例子
假设有个记录数字1-5的函数如下所示
function log(num){if(num 5){return;}console.log(num);log(num 1);
}log(1); 当运行上面的代码时log只要num变量的值小于5函数就会简单地调用自身直到等于5后跳出。
递归函数必须至少有一个条件它会停止调用自己否则函数将无限期地调用自己直到 JavaScript 抛出错误。
可能你会想为什么不直接使用for循环执行呢也可以达到一样的效果。
for(let i 1; i 5; i){console.log(i);
} for循环要求知道重复执行代码的次数。但是可以使用递归函数和while循环来执行一段代码而无需知道需要重复多少次。只需要知道停止执行的条件即可。
例如假设有如下问题
随机选择一个介于 1 到 10 之间的数字直到得到数字 5。记录在 random 方法返回 5 之前需要执行多少次代码。
以下是使用递归函数的方法
function randomUntilFive(result 0, count 0){if(result 5){console.log(随机结果: ${result});console.log(随机执行次数: ${count});return;}result Math.floor(Math.random() * (10 - 1 1) 1);count;randomUntilFive(result, count);
}randomUntilFive(); 不能用for循环替换上面的代码但可以用while循环替换它
let result 0;
let count 0;while (result ! 5) {result Math.floor(Math.random() * (10 - 1 1) 1);count;
}console.log(随机结果: ${result});
console.log(随机执行次数: ${count}); 如何读取递归函数
乍一看递归函数并不直观或易于理解。以下步骤将帮助您更快地阅读和理解递归函数
始终先确定函数的基本情况。将参数传递给将立即到达基本情况的函数。确定至少将执行递归函数调用一次的参数。
使用上面的示例尝试读下面的代码randomUntilFive()。
function randomUntilFive(result 0, count 0){if(result 5){// 触发结束}// 递归调用函数
}randomUntilFive(); 这意味着可以通过将数字传递给5参数来达到结束。
function randomUntilFive(result 0, count 0){if(result 5){console.log(随机结果: ${result});console.log(随机执行次数: ${count});return;}
}randomUntilFive(5); 虽然count参数不应该为零但将数字5作为参数传递给上面的函数调用可以满足第二步的要求。
最后需要找到一个至少执行一次递归函数调用的参数。在上述情况下可以传递任何数字而不是传递任何数字5
function randomUntilFive(result 0, count 0){if(result 5){console.log(随机结果: ${result});console.log(随机执行次数: ${count});return;}result Math.floor(Math.random() * (10 - 1 1) 1);count;randomUntilFive(result, count);
}randomUntilFive(4);
// 5以外的任何数字
// 执行递归调用 如何编写递归函数
编写递归函数与阅读递归函数几乎相同
使用通过其参数达到的结束条件创建一个常规函数。将参数传递给立即触发结束条件的函数。只传递一次触发递归调用的下一个参数。
假设编写一个计算阶乘的函数。下面是五的阶乘
5_4_3_2_1 120
首先这个函数的结束条件是 1创建一个factorial返回 1 的函数
function factorial(num){if(num 1){return num;}}console.log(factorial(1)); 现在进入第三步。需要在函数中得到一个递归调用并且至少调用一次。由于阶乘计算在每次乘法时将数字减一因此可以通过传递num-1给递归调用来模拟它
function factorial(num){if(num 1){return num;}return num * factorial(num-1)
}console.log(factorial(2)); 递归函数完成调用试试
console.log(factorial(5));