一、遞迴:函式中呼叫函式自己,在使用遞迴的時候一定需要有結束遞迴的條件,否則就會變成死迴圈。
想要用遞迴必須知道兩個條件:
1、遞迴出口(終止遞迴的條件)
2、遞迴表示式(規律)
技巧:在遞迴中常常是將問題切割成兩個部分(1和整體的思想),這能夠讓我們快速找到遞迴表示式(規律)
二、遞迴和迴圈的區別
簡單來說,迴圈是有去無回,而遞迴則是有去有回(因為存在終止條件)。
舉個栗子,你用你手中的鑰匙開啟一扇門,結果去發現前方還有一扇門,緊接著你又用鑰匙開啟了這扇門,然後你又看到一扇們…但是當你開到某扇門時,發現前方是一堵牆無路可走了,你選擇原路返回——這就是遞迴 但是如果你開啟一扇門後,同樣發現前方也有一扇們,緊接著你又開啟下一扇門…但是卻一直沒有碰到盡頭——這就是迴圈。
三、例項
1、遞迴案例:求乙個數字各個位數上的數字的和
function geteverysum(x)
//獲取的是這個數字的個位數
return x % 10 + geteverysum( parseint( x/ 10 ) );
} console.log(geteverysum(987654321)); // 45
2、平鋪多維陣列
let arr = [ [1,2,], 3 ,4, [5, [6, [7 ,8, [9]]]]]
let temp =
function digui(arr) else
}} digui(arr)
console.log(temp); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
// 判斷資料型別
function datatype(obj)
return o.tostring.call(obj).slice(8,-1).tolowercase()
}
2、求和
// for 求10以內數字的和
var sum=0
for ( var i =0; i < 10 ; i++ )
console.log(sum ); // 45
// 遞迴實現n個數字的和
function getsum (x)
return x + getsum ( x - 1 );
}console.log(getsum( 10 - 1 )); // 45
3、獲取陣列中的最大值
let array = [1, 11,11,115,115];
console.log(getmax(array,0,array.length - 1 )); // 115
/*** 遞迴,找出陣列最大的值
* @param arr陣列
* @param left 左邊界,第乙個數
* @param right 右邊界,陣列的長度
* @return
*/function getmax(arr, left, right) else else
}}
4、漢諾塔玩法
// 漢諾塔的規則
// 有三根柱子,原始裝滿大小不一的盤子的柱子我們稱為a,還有兩根空的柱子,我們分別稱為b和c(任選)
// 最終的目的就是將a柱子的盤子全部移到c柱子中
// 移動的時候有個規則:一次只能移動乙個盤子,小的盤子不能在大的盤子下面(反過來:大的盤子不能在小的盤子上面)
console.log("bar1-- 有三個盤");
towersofhanoi(3, 'bar1', 'bar2', 'bar3');
* 漢諾塔
* @param n n個盤子
* @param start 起始柱子
* @param transfer 中轉柱子
* @param target 目標柱子
* function towersofhanoi( n, start, transfer, target) else
}
5、氣泡排序遞迴寫法
氣泡排序:倆倆交換,在第一趟排序中能夠將最大值排到最後面,外層迴圈控制排序趟數,內層迴圈控制比較次數
以遞迴的思想來進行改造:
當第一趟排序後,我們可以將陣列最後一位(right)和陣列前面的數(left,right-1)進行切割,陣列前面的數(left,right-1)看成是乙個整體,這個整體又是和我們的初始目的(找出最大值,與當前趟數的末尾處交換)是一樣的
遞迴出口:當只有乙個元素時,即不用比較了:left === right
let arrays = [2, 3, 4, 5, 1, 5, 2, 9, 5, 6, 8, 3, 1]
bubblesort(arrays, 0, arrays.length - 1)
console.log(arrays) // [1, 1, 2, 2, 3, 3, 4, 5, 5, 5, 6, 8, 9]
function bubblesort(arr, left, right ) else
}//第一趟排序後已經將最大值放到陣列最後面了
//接下來是排序"整體"的資料了
bubblesort(arr, left, right - 1);
}}
JS遞迴的用法JavaScript遞迴)
函式中用呼叫函式自己,此時就是遞迴,遞迴一定要有結束條件 function f1 f1 瀏覽器崩潰,因為沒有結束條件 死迴圈 改進如下 var i 0 function f1 console.log 從前有座山,山里有個廟,廟裡有個老和尚給小和尚講故事 f1 遞迴實現 求n個數字的和 n 5 5 4...
JavaScript 特殊理解
js var data for var k 0 k 3 k console.log outer k data 0 3,而不是0 data 1 3,而不是1 data 2 3,而不是2 eval 和function構造不同 eval 可以干擾作用域鏈.而function 更安分守己些。不管你在 執行 ...
Javascript理解this物件
this是函式執行時自動生成的乙個內部物件,只能在函式內部使用,但總指向呼叫它的物件。通過以下幾個例子加深對this的理解。1 作為函式呼叫 var name jenny function person console.log person jenny上面這個例子在全域性作用域中呼叫person 此...