携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情
递归介绍
递归,就是自己调用自己,是一个函数不断引用自身,直到引用的唯一已知对象时止的过程。通常将一个大问题层层转换成一个与原问题相似的小问题来求解。用有限的语句来定义对象的无限集合,一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
递归主要解决符合以下特点的问题:
该问题可拆解成若干个子问题,所有子问题的求解方法和大问题的求解方法一样,存在结果已知的最小子问题。即子问题须与原始问题为同样的事,且更为简单。不能无限制地调用本身,须有个出口,化简为非递归状况处理。
斐波纳契数列
斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21..... I
斐波纳契数列可以使用递归实现,通过总结数据的规律。
1.找规律
观察数据可得f(n) = f(n-1) + f(n-2) (n>=3)
2.数据特殊情况特殊处理
if (n == 1 || n == 2) {
return 1;
}
全部代码:
这里是在vue中写的方法,所以有this。
fun(n) {
if (n == 1 || n == 2) {
return 1;
}
// 使用规律f(n) = f(n-1) + f(n-2)
return this.fun(n - 1) + this.fun(n - 2);
}
青蛙跳台阶
正常青蛙跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级,也可以跳上3级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
解答:
1.找规律
可以发现,如果青蛙要跳到第n级上,则可以从第n-1,n-2,n-3级台阶跳上去。那么跳到n-1级、n-2级、n-3级的总数就等于跳到第n级的总数,即f(n) = f(n-1) + f(n-2) + f(n-3) (n>=4)
fun(n) {
if(n == 1 || n == 2){
return n
}
if(n == 3){
// 111,12,21,3
return 4
}
// 使用规律f(n) = f(n-1) + f(n-2) + f(n-3) n >= 4
return this.fun(n - 1) + this.fun(n - 2) + this.fun(n-3);
}
可以看见,当台阶数大于等于4时,可用f(n) = f(n-1) + f(n-2) + f(n-3)计算。
变态青蛙跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。 求该青蛙跳上一个n级的台阶总共有多少种跳法。
解答:如果青蛙要跳到n级台阶上,则可从第1,2,...,n-1级台阶跳到第n级台阶上。即 f(n)=f(n-1)+f(n-2)+...+f(1) (1)
f(n-1) = f(n-2)+f(n-3)+f(n-4)+...+f(1) (2)
(1)-(2)可得:f(n) = 2f(n-1)
fun(n) {
if(n == 1){
return 1
}
// f(n) = 2f(n-1) n>=2
return 2*this.fun(n - 1);
}