什么是递归?
简单的来说:递归就是函数自己调自己。
下来我们来看几个例子让你彻底搞懂递归
- 一、计算n的阶乘
顾名思义阶乘就是所有小于及等于该数的正整数的积。(0和1的阶乘是1)
- 下面我们先用循环的方式来实现
function jieCheng(n){
let sum = 1;
for(let i = 1;i<=n;i++){
sum = sum * i;
}
return sum;
}
- 递归实现
分析:
5! = 54!
4! = 43!
3! = 32!
2! = 21!
1! = 1;
0! = 1;
规律就是:n! = n*(n-1)!,除了0和1外,那这样就好办了,上代码。
function jieCheng(n){
if(n==1||n==0){
return 1
}else{
return n*jieCheng(n-1)
}
}
- 二、 求最大公约数
几个数所共有的约数中最大的一个,即可以整除这几个数的最大的数,叫做这几个数的最大公约数。
- 循环方式
function maxNum(num1,num2){
let min = num1>num2?num2:num1;
for(let i = min;i >= 1 ; i--){
if(num1 %i == 0 && num2&i == 0){
return i;
}
}
}
- 递归
思路:利用欧几里得思路(辗转相除法),就是两个数中用较大数除以较小数,再用余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。得到最后的除数就是这两个数的最大公约数。
n1 n2 n3
57 % 48 = 9
n1 n2 n3
48 % 9 = 3
n1 n2 n3
9 % 3 = 0 余数为0时,此次求余的小数就是最大公约数
function maxNum(num1,num2){
if(num1%num2==0){
return num2
}else{
return maxNum(num2,num1%num2)
}
}
- 三、 斐波那契列
前两项之和等于后面的值
例: 1 1 2 3 5 8 13 21规律:
num1+num2 = num3
num2+num3 = num4
num3+num4 = num5
…
- 循环
function fibonaccille(n){
if(n==1){
return 1
}
let n1 = 1;
let n2 = 1;
let n3;
for(let i=3 ; i<n;i++){
n3= n1+n2;
n1 = n2;
n2 = n3;
}
return n3
}
- 递归
function fibonaccille(n){
if(n<=2){
return 1
}else{
return fibonaccille(n-1)+fibonaccille(n-2)
}
}