C++ 求阶乘 四种方法

           来总结下求阶乘的各种方法哈。

           写在最前:①各个代码仅仅是提供了求阶乘的思路,以便在实际须要时再来编码,代码并不健壮!②各个程序都在1到10内測试正确。

           代码一:

#include<iostream>
using namespace std;

int fac(int);

int main()
{
	int n;

	while(cin>>n)
	{
		cout<<n<<"!= "<<fac(n)<<endl;
	}

	return 0;
}

int fac(int x)
{
	register int i,f=1;  //定义寄存器变量

	for(i=1;i<=x;i++)
		f*=i;

	return f;
}

            分析:该程序在每次输入n时,都会调用fac()来暴力计算以得到结果。

            代码二:

#include<iostream>
using namespace std;

int a[11];

void init();

int main()
{
	init();

	int n;

	while(cin>>n)
	{
		cout<<n<<"!= "<<a[n]<<endl;
	}

	return 0;
}

void init()
{
	int i;

	a[0]=1;
	for(i=1;i<=10;i++)
		a[i]=i*a[i-1];
}

             分析:该程序利用了数组记录已得到的结果,并在计算下一个结果时利用了已得到的结果。

             代码三:

#include<iostream>
using namespace std;

int fac(int);

int main()
{
	int i;

	for(i=1;i<=10;i++)
	{
        cout<<i<<"!= "<<fac(i)<<endl;
	}

	return 0;
}

int fac(int x)
{
	static int f=1;   //静态局部变量

	f*=x;

	return f;
}

             分析:应该说该代码有用性最差,主要是来学习静态局部变量来了。

            代码四:

#include<iostream>
using namespace std;

int fac(int);

int main()
{
	int n;

	while(cin>>n)
	{
		cout<<n<<"!= "<<fac(n)<<endl;
	}

	return 0;
}

int fac(int x)   //递归函数
{
	int f;

	if(x==0 || x==1)
		f=1;
	else
		f=fac(x-1)*x;

	return f;
}

             分析:一直觉得递归技术非常奇妙。尽管在时间和空间方面都不是非常理想,但的确同意我们利用了以“模糊”的方式编程。对每一个细节不必锱铢必较了。

             写在最后:程序是个非常奇妙的东西。编程是个非常重要的能力。

             欢迎拍砖!
   

原文地址:https://www.cnblogs.com/lcchuguo/p/3991307.html