例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
许多问题既可以用递归方法来处理,也可以用非递归方法来处理。在实现递归时,在时间和空间上的开销比较大,但符合人们的思路,程序容易理解。
评论