[例4 - 1 0 ] factor(n) /* 递归调用方法* / int n; { int answer. if (n==1) return (1). answer=factor(n-1) * n; /* 函数自身调用* / return(answer). }
[例4 - 11 ] fact(n) /* 非递归方法* / int n. { int t,a n s w e r. answer = 1. for (t=1. t < = n. t ) answer = answer * t. return(answer). } 非递归函数fact( )的执行应该是易于理解的。它应用一个从1开始到指定数值结束的循环。 在循环中,用“变化”的乘积依次去乘每个数。 factor( )的递归执行比fact( )稍复杂。当用参数1调用factor( )时,函数返回1;除此之外的其它值调用将返回factor(n-1) * n这个乘积。为了求出这个表达式的值,用( n - 1)调用factor( )一直到n等于1,调用开始返回。 计算2的阶乘时对factor( )的首次调用引起了以参数1对factor( )的第二次调用。这次调用返回1,然后被2乘(n的初始值),答案是2(把printf( )语句插入到factor ( )中,察看各级调用及其中间答案,是很有趣的)。