例4.11 用递归方法求n!。 求n!可以用递推方法,即从1开始,乘2,再乘3……一直乘到n。 求n!也可以用递归方法,即5!=4!×5,而4!=3!×4,…,1!=1。可用下面的递归公式表示: n!= 1 (n=0,1) n·(n-1)! (n>1) 有了例4.10的基础,很容易写出本题的程序: #include <iostream> using namespace std; long fac(int); //函数声明 int main( ) {int n; //n为需要求阶乘的整数 long y; //y为存放n!的变量 cout<<″please input an integer :″; //输入的提示 cin>>n; //输入n y=fac(n); //调用fac函数以求n! cout<<n<<″!=″<<y<<endl; //输出n!的值 return 0; } long fac(int n) //递归函数 {long f; if(n<0) {cout<<″n<0,data error!″<<endl; //如果输入负数,报错并以-1作为返回值 f=-1;} else if (n==0||n==1) f=1; //0!和1!的值为1 else f=fac(n-1)*n; //n>1时,进行递归调用 return f; //将f的值作为函数值返回 } 运行情况如下: please input an integer:10↙ 10!=3628800 许多问题既可以用递归方法来处理,也可以用非递归方法来处理。在实现递归时,在时间和空间上的开销比较大,但符合人们的思路,程序容易理解。

评论