栈的一个重要应用是在程序设计语言中实现递归。所谓递归,是指如果一个对象部分地包括它自己,或用它自己给自己定义,则称这个对象是递归的,或定义为在一个过程中直接或间接地调用自己,则称这个过程是递归的。在调用一个函数(程序)的过程中又直接或间接地调用该函数(程序)本身,称为函数的递归调用。一个递归的求解问题必然包含终止递归的条件,当满足一定条件时就终止向下递归,从而使问题得到解决。描述递归调用过程的算法称为递归算法。在递归算法中,需要根据递归条件直接或间接地调用算法本身,当满足终止条件时结束递归调用。
现实中有许多实际问题采用递归方法来解决,使用递归的方法编写程序将使许多复杂的问题大大简化。例如计算求n的阶乘问题,可以利用阶乘的递推公式n!=n*(n-1)!,对该问题进行分解,把计算n的阶乘问题化为等式右边涉及规模较小的同类问题(n-1)的阶乘的计算。
例 用递归函数求解正整数n的阶乘(n!)
设f(n)=n!,则递归函数f(n)可表示为:
此处n=0为递归终止条件,使函数返回1;当n>0时实现递归调用,由n的值乘以f(n-1)的返回值求出f(n)的值。
上述递归函数用c语言描述为:
int f(int n){ if(n==0) r