递归算法的原理
/*
递归算法:
递归现象:函数将自身内部的变量作为参数传递给自身的调用,并且将自身的调用结果返回出去
递归实际利用的是闭包的原理
闭包原理:
函数执行的时候会开辟一个执行栈,在函数执行完以后就会进行内存释放,包括函数内部的变量
而函数return出的一个函数对函数内部变量进行引用的时候,函数内部变量就被保存在return出的函数当中,而无法在函数执行完以后进行内存释放
*/
/*
递归关键的两个要素:
1.结束递归判断条件
2.运算表达式
注意:
1.由于递归中一般n是最大值,n逐渐减小,所以判断条件一般会和 1 有关
2.判断条件一定要在运算表达式的前面,否则递归不会停止
*/
/*
程序要求:
求n的阶乘
*/
/*
本程序分析:
根据!n=n*!(n-1)
可以得出运算表达式为 f(n)=n*f(n-1)
根据!1=1,得出判断条件为if(n==1) return 1;
*/
function fn(n){
if(n==1) return 1;
return n*fn(n-1)
}
//为了检测算法正确性 函数输入3,只要结果为6即正确
console.log(fn(3))