什么是递归
递归的定义
在定义一个过程或函数时,出现直接或间接调用自己的成分,称之为递归。
直接调用自己称为直接递归
间接调用自己称为间接递归
如果一个递归函数中调用递归语句是最后一条执行语句,则称这种递归调用为尾递归。
尾递归算法:可以用循环语句转换为等价的非递归算法
其他递归算法:可以通过栈转换为等价的非递归算法
何时使用递归
定义是递归
数据结构是递归的
问题的求解方法是递归的
递归模型的构成
递归出口—确定递归结束情况
递归体—确定大小问题的求解情况
(以上内容来自网络资料)
递归需要结束条件,否则死循环
例如
function demo() {
document.write('哈哈');
demo();
}
demo();
导致如下图
会导致报错Maximum call stack size exceeded;超过最大调用堆栈大小
那么如何解决呢,解决办法就是添加一个结束条件。
var i = 0;
function demo() {
i++;
if (i<3) {
demo();
}
document.write('哈哈');
}
demo();
这样就没问题了。
做个例题,算5的阶乘
function demo(num) {
if (num == 1) {
return 1;
}else {
return num * demo(num-1);
}
}
document.write(demo(5));
再次精简后
function factorial(n){
return n > 1 ? n * factorial(n-1) : 1;
}
document.write(factorial(n = prompt('请输入要求的数字')));
并且可以根据用户输入的值算,不再局限于5。
兔子问题,题目:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
function demo(num) {
if (num == 1||num==2) {
return 1;
}else {
return demo(num-1) + demo(num - 2);
}
}
document.write(demo(6));
以上就是第六个月的兔子