第2个回答 推荐于2018-04-06
递归函数提供了不一样的思维方式,用他来解决往往程序要短小很多,思维也会很清晰。它很适合解决树中的一些问题,在编译原理中也可以经常看到。
它的主要的解决问题的思维是这样的:
先解决最基础的简单的问题;
然后把复杂的问题归结为较简单的问题或把较大的问题分解为较小的问题。
下面这小段程序是用递归写的用来求1到n所有这些正整数的和的:
int f(int n){
if(n==1) return 1;
return n+f(n-1);
}
第一句解决了最简单的问题,就是n==1的情况。接下去在求较复杂的f(n)的时候把它归结为较简单的问题f(n-1)。
用递归也有几个需要注意的问题:
1.程序总得要有机会让它退出来,不然会变成死循环。就象这里的第一句,而且一般来说位置也通常在第一句。
2.递归还有性能开销。一是因为函数调用时参数的入栈出栈操作。二是有些问题处理不当会出现重复计算(不是很老到的程序员经常会出这样的问题,导致性能有问题,然后说递归根本没实际意义)。本回答被网友采纳