C++求阶乘的两种方法
C++语言中求阶乘的方法有很多种,今天我们将介绍其中的两种方法:使用静态局部变量和使用递归的方法。
使用静态局部变量
静态局部变量是一种特殊的变量,它在函数调用结束之后不消失,而是保留原值,即其占用的存储单元不释放。在下一次该函数调用时,该变量保留上一次函数调用结束时的值。静态局部变量赋初值实在编译时进行的,即只赋初值一次,在程序运行时它已有初值。
下面是使用静态局部变量求阶乘的代码示例:
```c
#include<iostream>
using namespace std;
int fac(int n){
static int f=1;
f=f*n;
return f;
}
int main(){
int i;
for(i=1;i<=5;i++) {
cout<<i<<"!="<<fac(i)<<endl;
}
return 0;
}
```
这段代码使用静态局部变量`f`来存储阶乘的结果,在每次调用`fac`函数时,`f`都会被更新为当前的阶乘结果。输出结果为:
```
1!=1
2!=2
3!=6
4!=24
5!=120
```
使用递归的方法
递归是一种常用的求阶乘方法,它通过不断调用自己来计算阶乘的结果。下面是使用递归的代码示例:
```c
#include<iostream>
using namespace std;
int fac(int n){
if(n<0) return 0;
if(n==0||n==1)return 1;
if(n>1) {
return n*fac(n-1);
}
}
int main(){
int i;
for(i=1;i<=5;i++) {
cout<<i<<"!="<<fac(i)<<endl;
}
return 0;
}
```
这段代码使用递归的方法来计算阶乘的结果,在`fac`函数中,我们首先进行退出递归的判断,然后进行递归调用自己来计算阶乘的结果。输出结果为:
```
1!=1
2!=2
3!=6
4!=24
5!=120
```
比较两种方法
从上面的代码示例可以看出,使用静态局部变量和使用递归的方法都可以求出阶乘的结果,但是它们有不同的优缺点。
使用静态局部变量的方法可以避免递归的调用,从而提高程序的效率,但是它需要注意静态局部变量的生命周期和作用域。
使用递归的方法可以使代码更加简洁易懂,但是它可能会导致栈溢出和效率低下的问题。
因此,在实际应用中,选择哪种方法取决于具体情况和需求。