递归算法例题( indexOf)

递归算法
一.递归的三要素:
  1. 明确递归终止条件;
    递归就是有去有回,既然这样,那么必然应该有一个明确的临界点,程序一旦到达了这个临界点,就不用继续往下递去而是开始实实在在的归来。换句话说,该临界点就是一种简单情境,可以防止无限递归。

  2. 给出递归终止时的处理办法;
    我们刚刚说到,在递归的临界点存在一种简单情境,在这种简单情境下,我们应该直接给出问题的解决方案。一般地,在这种情境下,问题的解决方案是直观的、容易的。

  3. 提取重复的逻辑,缩小问题规模。
    我们在阐述递归思想内涵时谈到,递归问题必须可以分解为若干个规模较小、与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决。从程序实现的角度而言,我们需要抽象出一个干净利落的重复的逻辑,以便使用相同的方式解决子问题。

  4. 递归算法的编程模型
    在我们明确递归算法设计三要素后,接下来就需要着手开始编写具体的算法了。在编写算法时,不失一般性,我们给出两种典型的递归算法设计模型,如下所示。

模型一: 在递去的过程中解决问题
function recursion(大规模){
    if (end_condition){      // 明确的递归终止条件
        end;   // 简单情景
    }else{            // 在将问题转换为子问题的每一步,解决该步中剩余部分的问题
        solve;                // 递去
        recursion(小规模);     // 递到最深处后,不断地归来
    }
}
模型二: 在归来的过程中解决问题
function recursion(大规模){
    if (end_condition){      // 明确的递归终止条件
        end;   // 简单情景
    }else{            // 先将问题全部描述展开,再由尽头“返回”依次解决每步中剩余部分的问题
        recursion(小规模);     // 递去
        solve;                // 归来
    }
}
JavaScript indexOf() 方法
一. 定义和用法

可返回某个指定的字符串值在字符串中首次出现的位置。

二.语法
stringObject.indexOf(searchvalue,fromindex)
  • searchvalue :必需。规定需检索的字符串值。
  • fromindex: 可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。

该方法将从头到尾地检索字符串 stringObject,看它是否含有子串 searchvalue。开始检索的位置在字符串的 fromindex 处或字符串的开头(没有指定 fromindex 时)。如果找到一个 searchvalue,则返回 searchvalue 的第一次出现的位置。stringObject 中的字符位置是从 0 开始的。

== 提示和注释 ==

注释:indexOf() 方法对大小写敏感!

注释:如果要检索的字符串值没有出现,则该方法返回 -1。

一道例题:

用递归算法实现,数组长度为5且元素的随机数在2~32间不重复的值:

//1.生成长度为5的数组,元素为2~32之间的随机数且不重复,请使用递归完成
function main(arr: number[]): number[] {
    let temp: number = random(2, 32);
    if (arr.length < 5) {
        if (arr.indexOf(temp) === -1) { //递归条件
            arr.push(temp);
        }
        return main(arr);
    } else if (arr.length === 5) { //基线条件
        return arr;
    }
}
//生成范围内随机数
let random = (min: number, max: number): number => {
    return Math.floor(Math.random() * (max - min + 1) + min);
}
console.log(main([]));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值