【时时三省】(C语言基础)函数的递归调用例题
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省
例题:
用递归方法求n !。
解题思路:
求n !可以用递推方法,即从1开始,乘2,再乘3……一直乘到n。这种方法容易理解,也容易实现。递推法的特点是从一个已知的事实(如1 ! = 1)出发,按一定规律推出下一个事实(如2 ! = 1 ! * 2),再从这个新的已知的事实出发,再向下推出一个新的事实( 3 ! = 3 * 2 ! )。n ! = n * ( n-1 ) !。求n !也可以用递归方法,即5 !等于4 !×5,而4 ! = 3 !×4,.,1 ! = 1。可用下面的递归公式表示:n ! = 1 ( n = 0 , 1 ) n ! = n×( n-1 ) ! ( n > 1 )。
编写程序:
运行结果:
程序分析:
请注意每次调用fac函数后,其返回值f应返回到调用fac函数处,例如,当n =2时,从函数体中可以看到“f = fac ( 1 ) * 2”再调用fac ( 1 ),返回值为1。这个1就取代了“f = fac ( 1 ) * 2”中的fac ( 1 ),从而f = 1×2 = 2。其余类似。递归终止条件为n = 0或n = 1。
注意:
程序中的变量是int型,如果用Visual C++、GCC以及多数C编译系统为int型数据分配4个字节,能表示的最大数为2 147 483 647。如果输入13,企图求13 !,是得不到预期结果的,因为求出的结果超过了int型数据的最大值。可将f,y和fac函数定义为float或double型。