冒泡排序和递归
冒泡
基本思想
- 依次比较相邻的两个数,如果不符合排序规则,则调换两个数的位置。这样一遍比较下来,能够保证最大(或最小)的数排在最后一位。
- 再对最后一位以外的数组重复前面的过程,直至全部排序完成。
因为每一次对比后,最大或最小的数都会自己浮现出来,就跟吐泡泡一样,冒泡排序因此得名
具体实现
let arr = [5, 2, 10, 8, 6, 23, 14] //i => 循环的轮数 for (let i = 0; i < arr.length - 1; i++) { //j => 选中元素的下标 这里要根据外层for循环的i,逐渐减少内层 for循环的次数 for (let j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { //如果前一个数大于后一个数就交换两数位置 [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]] } } } // 最终结果 console.log(arr)
递归
递归,就是在运行的过程中直接或间接调用自己。
三要素
用来做什么
(条件)
首先我们得清楚地明白你要拿这个函数用来做什么
其次要知道构成递归需具备的条件:
子问题须与原始问题为同样的事,且更为简单;
不能无限制地调用本身,须有个出口,化简为非递归状况处>理。
结束条件
我们必须要找出递归的结束条件,不然的话,会一直调用自己,进入无底洞。也就是说,我们需要找出当参数为啥时,递归结束,之后直接把结果返回,请注意,这个时候我们必须能根据这个参数的值,能够直接知道函数的结果是什么。
等价关系式
我们要不断缩小参数的范围,缩小之后,我们可以通过一些辅助的变量或者操作,使原函数的结果不变。
简单递归求和
function sum(x) { //结束条件 if(x<1){ return 0; } //等价关系式 return x+sum(x-1); } console.log(sum(5)); => 输出:15