冒泡和递归

冒泡排序和递归

冒泡

基本思想

  1. 依次比较相邻的两个数,如果不符合排序规则,则调换两个数的位置。这样一遍比较下来,能够保证最大(或最小)的数排在最后一位。
  2. 再对最后一位以外的数组重复前面的过程,直至全部排序完成。

因为每一次对比后,最大或最小的数都会自己浮现出来,就跟吐泡泡一样,冒泡排序因此得名

在这里插入图片描述

具体实现

  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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值