JS高级. 04 增删改查面向对象版歌曲管理、递归、

2021-05-20 10:27

阅读:709

YPE html>

标签:递推   init   内存   返回值   摩擦   etc   one   结构   方法   

增 数组.push()

删 数组.splice(开始删除索引,删除几个)

在当前对象中调用当前对象的方法中和属性,必须用this调用

nodeType判断节点类型

节点.nodeType ==  1:元素节点/2:属性节点/3:文本节点

concat 返回的是一个新的数组

 

封装歌曲列表管理(函数)

技术分享技术分享
 1 
 2 
 3 4      5     Title 6     89 
90 
91 
92 
93 
封装歌曲列表管理(函数)

面向对象封装歌曲管理

    
    
    Title

 

递归(练习在最底下)

1.在函数内调用函数自己,就是递归
2.函数不调用不占用内存
3.没有递归结束条件的递归就是死队规

递归的两个要素

1.自己调用自己
2.要有结束的条件

化归思想:把问题由难化易,化繁为简,有复杂变简单的过程成为化归


Title
1div

1p1span2span3span

5p1span2span3span

10div

1p1span2span3span

5p1span2span3span

我是第1个p标签

我是第10个p标签

方式二

    

递归

例子:

1, 2, 3, 4, 5, ..., 100 求和

  1. 首先假定递归函数已经写好, 假设是foo. 即foo(100)就是求1100的和

  2. 寻找递推关系. 就是nn-1, 或n-2之间的关系:foo( n ) == n + foo( n - 1 )

var res = foo(100);
var res = foo(99) + 100;

将递推结构转换为递归体

function foo(n){
    return n + foo( n - 1 );
}

上面就是利用了化归思想:

  • 将 求 100 转换为 求 99

  • 将 求 99 转换为 求 98

  • ...

  • 将求 2 转换为 求 1

  • 求 1 结果就是 1

  • 即: foo( 1 ) 是 1

将临界条件加到递归体中(求1的结果为1)

function foo( n ) {
    if ( n == 1 ) return 1;
    return n + foo( n - 1 );
}

练习:

求 1, 3, 5, 7, 9, ... 第n项的结果与前n项和. 序号从0开始

先看求第n
  1. 首先假定递归函数已经写好, 假设是fn. 那么第n项就是fn(n)

  2. 找递推关系:fn(n) == f(n-1) + 2

  3. 递归体

function fn(n) {
    return fn(n-1) + 2;
}
  1. 找临界条件

    • 求 n -> n-1

    • 求 n-1 -> n-2

    • ...

    • 求 1 -> 0

    • 求 第 0 项, 就是 1

  2. 加入临界条件

function fn( n ) {
    if ( n == 0 ) return 1;
    return fn( n-1 ) + 2;
}
再看求前n项和
  1. 假设已完成, sum( n ) 就是前 n 项和

  2. 找递推关系: 前 n 项和 等于 第 n 项 + 前 n-1 项的和

  3. 递归体

function sum( n ) {
    return fn( n ) + sum( n - 1 );
}
  1. 找临界条件

    • n == 1结果为 1
  2. 加入临界条件

function sum( n ) {
    if (n == 0) return 1;
    return fn(n) + sum(n - 1);
}

练习

2, 4, 6, 8, 10 第 n 项与 前 n 项和

解题方法和上一题一样。

练习

现有数列: 1, 1, 2, 4, 7, 11, 16, … 求 第 n 项, 求前 n 项和.

求第n
  1. 假设已经得到结果 fn, fn( 10 ) 就是第 10 项

  2. 找递推关系

    • 0, 1 => fn( 0 ) + 0 = fn( 1 )

    • 1, 2 => fn( 1 ) + 1 = fn( 2 )

    • 2, 3 => fn( 2 ) + 2 = fn( 3 )

    • ...

    • n-1, n => fn( n-1 ) + n - 1 = fn( n )

  3. 递归体也就清楚了

  4. 临界条件是 n == 0 => 1

function fn( n ) {
    if ( n == 0 ) return 1;
    return fn( n-1 ) + n - 1;
}
n项和
function sum( n ) {
    if ( n == 0 ) return 1;
    return sum( n - 1 ) + fn( n );
}

练习

Fibonacci 数列: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, … 求其第 n 项.

递推关系:fn(n) == fn(n-1) + fn(n - 2)

function fib( n ) {
    if ( n == 0 || n == 1 ) return 1;
    return fib( n - 1 ) + fib( n - 2 );
}

练习

阶乘:一个数字的阶乘表示的是从 1 开始 累乘到这个数字. 例如 3! 表示 1 3. 5! 就是 1 5. 规定 0 没有阶乘, 阶乘从1开始。

求n的阶乘

function foo ( n ) {
    if ( n == 1 ) return 1;
    return foo( n - 1 ) * n;
}

练习

求幂

  • 求幂就是求 某一个数 几次方

  • 2*2 2 的 平方, 2 的 2 次方

  • 求 n 的 m 次方

  • 最终要得到一个函数 power( n, m )

  • n 的 m 次方就是 m 个 n 相乘 即 n 乘以 (m-1) 个 n 相乘

function power ( n, m ) {
    if ( m == 1 ) return n;
    return power( n, m - 1 ) * n;
}

 

JS高级. 04 增删改查面向对象版歌曲管理、递归、

标签:递推   init   内存   返回值   摩擦   etc   one   结构   方法   

原文地址:http://www.cnblogs.com/mingm/p/7707160.html


评论


亲,登录后才可以留言!