javascript遞迴理解及實戰

2021-09-23 10:23:10 字數 2761 閱讀 1398

一、遞迴:函式中呼叫函式自己,在使用遞迴的時候一定需要有結束遞迴的條件,否則就會變成死迴圈。

想要用遞迴必須知道兩個條件:

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 此...