先看一個面試題,題目如下:有一個棧,往裡面一次壓入1,2,3,4,5這幾個元素,得到的結果為[1,2,3,4 ,5],現在只能用遞歸的方法,將堆疊裡面的元素顛倒,得到的結果為[5,4,3,2,1]。要是沒有題目要求的話,這個就比較簡單了,直接arr.reverse()就可以解決問題,不過只能用遞歸就有意思了,菜鳥一般的我就得好好研究一番了。
#我們把堆疊[1, 2, 3, 4, 5]看成由兩部分組成:棧頂元素1和剩下的部分[2, 3, 4, 5]。
如果我們能把[2, 3, 4, 5]顛倒過來,變成[5, 4, 3, 2],然後在把原來的棧頂元素1放到底部,那麼就整個堆疊就顛倒過來了,變成[5, 4, 3, 2, 1]。
接下來我們需要考慮兩件事:一是如何把[2, 3, 4, 5]顛倒過來變成[5, 4, 3, 2]。我們只要把[2, 3, 4, 5]看成由兩部分組成:棧頂元素2和剩下的部分[3, 4, 5]。
我們只要把[3, 4, 5]先顛倒過來變成[5, 4, 3],然後再把之前的棧頂元素2放到最底部,也就變成了[5 , 4, 3, 2]。
至於怎麼把[3, 4, 5]顛倒過來…很多讀者可能會想到這就是遞歸。也就是每次試圖顛倒一個棧的時候,現在棧頂元素pop出來, 再顛倒剩下的元素組成的棧,最後把之前的棧頂元素放到剩下元素組成的棧的底部。遞歸結束的條件是剩下的堆疊已經空了
//这个函数的作用是把栈中的元素展开 function reverseStack(arr){ if( arr.length != 0 ) { var topItem = arr.pop() reverseStack(arr) pushStack(arr, topItem) } return arr}//这个函数的作用是把函数进行颠倒 function pushStack(arr, item){ else{ console.log(arr) if(arr.length == 0){ arr.push(item) }
相關推薦:
以上是JavaScript用遞歸方法實作顛倒堆疊的元素的詳細內容。更多資訊請關注PHP中文網其他相關文章!