![算法设计与分析:基于C++编程语言的描述](https://wfqqreader-1252317822.image.myqcloud.com/cover/264/47216264/b_47216264.jpg)
上QQ阅读APP看书,第一时间看更新
1.4.2 n的阶乘
计算n!的公式可以定义为
![](https://epubservercos.yuewen.com/D73C72/26580621209997706/epubprivate/OEBPS/Images/Figure-P26_11088.jpg?sign=1739406223-HBuRAEbxm2oLXlOFirWkZCG0XCovkxj5-0-fe7733d275f50acf5e2832c8f6a165e6)
显然,这是一个以递归技术定义的公式,在描述阶乘算法时又用到阶乘这一概念,因而很自然想到使用递归来实现该问题,递归的停止条件是n=0。
递归算法描述如下:
long long fun(int n) { if(n<0) cout<<"Illegal number!"<<endl; else if(n==0) return 1; else return n*fun(n-1); }
以n=3为例,fun(3)的运行过程如图1-2所示。
可见,fun()在运行中不断调用自身从而降低规模,当规模降为0时,即递推到fun(0),此时满足停止条件则停止递推,开始回归(返回调用算法)并进行计算,直到递推开始处,即求得fun(3)的值。
![](https://epubservercos.yuewen.com/D73C72/26580621209997706/epubprivate/OEBPS/Images/Figure-P27_2252.jpg?sign=1739406223-Bpf9LEvK19kQ3IZ3peHnXQ5HxR75Lowv-0-8f10d17762e8fc3f28493b2b982c1dd2)
图1-2 fun(3)的运行过程示意图