int Factorial( int number ) { if ( number == 1 ) { return 1; } else { return number * Factorial( number - 1 ); } }
除了速度慢[1]和 运行时内存的使用不可预测[2]之外,此例程的递归版本比迭代版本更难理解,如下所示:
int Factorial( int number ) { int intermediateResult = 1; for ( int factor = 2; factor <= number; factor++ ) { intermediateResult = intermediateResult * factor; } return intermediateResult; }
我认为缓慢的部分是因为不必要的函数调用开销。
但是递归如何使运行时内存的使用变得不可预测?
我们不能总是预测需要多少内存(因为我们知道递归应该何时结束)?我认为这将与迭代案例一样不可预测,但不再如此。