冒泡和遞迴
阿新 • • 發佈:2021-01-12
氣泡排序和遞迴
冒泡
基本思想
- 依次比較相鄰的兩個數,如果不符合排序規則,則調換兩個數的位置。這樣一遍比較下來,能夠保證最大(或最小)的數排在最後一位。
- 再對最後一位以外的陣列重複前面的過程,直至全部排序完成。
因為每一次對比後,最大或最小的數都會自己浮現出來,就跟吐泡泡一樣,氣泡排序因此得名
具體實現
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