Rumah > hujung hadapan web > tutorial js > JavaScript用递归方法实现颠倒栈的元素

JavaScript用递归方法实现颠倒栈的元素

零到壹度
Lepaskan: 2018-04-02 09:39:24
asal
1781 orang telah melayarinya

先看一个面试题,题目如下:有一个栈,往里面一次压入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)
   }
Salin selepas log masuk

相关推荐:

颠倒栈中元素--栈的逆置

颠倒栈

栈转置的实现

Atas ialah kandungan terperinci JavaScript用递归方法实现颠倒栈的元素. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan