首页 > 其他分享 >递归

递归

时间:2022-10-29 16:23:22浏览次数:80  
标签:return 数列 递归 else 斐波 fn

递归

如果一个函数在内部可以调用其本身,那么这个函数就是递归函数
简单理解:函数内部自己调用自己, 这个函数就是递归函数

递归属于一个对应的算法 ,所有的算法都是套路。递归能做所有循环能做的事情。

递归的三大要素 (O(logn))

  • 找规律

  • 找初始值 没有规律的已知条件

  • 自己调用自己

注:一个函数可以调用其自身。但在使用递归时,需要注意定义一个从函数退出的条件,否则会进入死循环。

递归函数在解决许多数学问题上起了至关重要的作用,比如计算一个数的阶乘、生成斐波那契数列,等等。

 

 

 

 

问第100个位置的值的什么 2 4 6 8 10 12 14 ... 当前值 = 上一个值 + 2

function fn(n){
    if(n == 1){ //没有规律的
        return 2
    }else{ //有规律的 自己调用自己
        return fn(n-1) + 2
    }
}
console.log(fn(100))

1-100的所有偶数和

//2 6 12 20 30    2 + 4  6 + 6 上一个 + 位数*2
function fn1(n){
    if(n == 1){
        return 2
    }else{
        return fn1(n-1) + n * 2
    }
}
console.log(fn1(50));

求对应的阶乘 5的阶乘 1 2 6 24

function fn(n){
    if(n == 1){
        return 1
    }else{
        return fn(n-1)*n
    }
}
fn(5)

 

1 2 4 7 11 16 问第10位

function fn(n){
 if(n == 1){
     return 1
 }else{
     return fn(n-1) + n - 1
 }
}
fn(10)

 

计算斐波那契数列的第N项

斐波那契数列(Fibonacci sequence),又称黄金分割数列。因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上, 斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3)。

书写递归函数代码第一步:依然是先写结束条件。

 

1 2 3 5 8 13 问第10位

function fn(n){
    if(n == 1){
       return 1
    }else if(n == 2){
        return 2
    }else{
        return fn(n-2) +fn(n-1)
    }
}
fn(10)

 

99 乘法表

//规律 没一行对应得行号就是他得列数
// 1*1=1
// 1*2=2 2*2=4
// ...
for(var i=1;i<10;i++){
var line = ""
for(var j=1;j<=i;j++){
line += j + '*' + i + '=' + j*i + '&emsp;'
}
document.write(line+'<br/>')
}

 

 

递归的优缺点

优点:结构清晰, 可读性强, 而且容易用数学归纳法来证明算法的正确性, 因此它为设计算法、 调试程序带来很大方便。

缺点:递归算法的运行效率较低, 无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。

注:在使用递归时,要注意对递归函数的参数类型的检查,一定要保证有一个终止处理或计算的出口。否则很容易演变为死循环,从而造成内存溢出。

 

 

 

 

标签:return,数列,递归,else,斐波,fn
From: https://www.cnblogs.com/hofenglang/p/16838972.html

相关文章