递归函数:让函数在内部自己调用自己
例1、递归求阶乘
// 递归求阶乘
function factorial(num) {
if (num == 1) {
return 1;
} else {
return num * factorial(num - 1);
};
};
console.log(factorial(13));
例2、抚平数组,多维转一维
<script>
// 多维转一维
var arr = [1, 2, 3, [4, 5, 6, [7, 8, 9, [10, 11, 12]]]];
function flatArr(array, rel) {
rel = rel || [];
// 数组的forEach方法没有返回值
array.forEach(function(v) {
if (Array.isArray(v)) {
flatArr(v, rel);
} else {
rel.push(v);
};
});
return rel;
};
console.log(flatArr(arr));
</script>
例3、斐波拉契题(兔子生兔子题目) --从出生后第3个月起每个月都生一对兔子, 小兔子长到第三个月后每个月又生一对兔子, 假如兔子都不死, 问每个月的兔子对数为多少
产量分析:1, 1, 2, 3, 5, 8, 13, 21 。。。
第n个月的兔子总数 = 第n-1个月的兔子总数 + 第n-2个月的兔子总对数
问题: 求任意月兔子的总对数
function rabbit(month) {
if (month == 1 || month == 2) {
return 1;
} else {
return rabbit(month - 1) + rabbit(month - 2);
}
}
console.log(rabbit(10)); //55