栈的引用简化了程序设计的问题,划分了不同的关注层次,使得思考范围缩小,更加聚焦于我们要解决问题的核心。
而数组等,要分散精力去思考数组的下标增减等细节问题,从而掩盖了问题的本质。
栈的应用 -- 递归
栈的重要应用就是在程序设计语言中实现了递归。
经典的递归例子: 斐波那契数列。
Eg: 如果说兔子出生两个月后便有繁殖能力,一对兔子每月能出生一对兔子,假如所有的兔子都不死,那一年后可以繁殖多少对兔子?
分析:我们拿新生的一对兔子从头分析:第一个月,兔子没有繁殖能力,所以还是一对;两个月后,生下一对兔子,共两对;三个月后,老兔子又生下一对,小兔子没有生育能力没有繁殖,则共有三对。。。 以此类推,可列出下表:
月数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
兔子对数 | 1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 | 55 | 89 | 144 |