Lmxy1990 ' Blog

递归转化为栈

问题:找到某个门后面的人.

递归:大门 -> 很多小门 -> 很多小门 …

栈:大门 -> 栈 ,出栈,打开门 –> 小门入栈 –> 出栈,打开门 – 小门入栈.

栈与递归的差别是,递归在内存之中,最外层的门其实未释放的.而递归是一直在压栈,出栈,拆解.所以,一般而言递归不会程序栈(内存)溢出.

递归代码:

Man open(Door door) {
if (door.isHasMan){
return door.man ;
}
if (door.isHasNextDoor){
//递归
return open(door.nextDoor)
}
}

栈代码:

Man open(Door door){
Man man ;
Stack stack = new Stack() ;
stack.push(door) ;
Door tmp ;
while(stack.size() != 0){
tmp = stack.peer() ;
if (tmp.isHasMan){
man = tmp.man ;
break ;
}
if (tmp.hasNextDoor){
stack.push(tmp.nextDoor) ;
}
}
}


End

坚持原创技术分享,您的支持将鼓励我继续创作!