入学C++基础算法
阶乘算法
阶乘算法,顾名思义运用阶乘,进行对其数值的计算。
比如:
#include<iostream>
using namespace std;
long fac( int ); //定义一个函数,其名称为 fac。
int main( )
{
int n; //定义一个数 n 表明输入值。
cout << "Please input an integer: ";
cin >> n;
long f; // f 为结果输出的值
f = fac( n ); //调用 fac 这个函数。
cout << '\n' << n << " ! = " << f;
return 0;
}
long fac( int n )
{
long f;
if ( n < 0 )//讨论当 n<0 时的情况(后面会解释为什么)
{
cout << "Data Error.";
f = -1;
}
else if ( n ==0 || n == 1 )
{
f = 1;
}
else
{
f = fac( n - 1 ) * n;
/*拿前一个 fac 的值,乘以 n。求得最终阶乘
结果 f。(此处的 f 数值和 main 函数中的 f
值虽然是一样,但是他们表示的含义不一样,
mian函数中的是实参,而这里面是形参,是个变量)
*/
}
return f;
}
其实我刚学 C++ 的时候直接套模板,没仔细研究,因而没有什么疑惑的,但是回头看,仔细推敲时候,有些地方就有了疑惑。说实话,代码这个东西其实一个是自己的理解,一个就是模板。蓝桥杯考的正是如此。
再说说我回头之时看到的一些疑惑。
if ( n < 0 )
{
cout << "Data Error.";
f = -1;
}
看这儿其实也看不出来什么,更应该从后面的
{
f = fac( n - 1 ) * n;
}
这儿能看出来就是,这个函数需要进行多次运算,多次 if 这个循环才能计算出结果。我们看这个运算,能感觉到这个代码是从后往前计算,但是我们可以运用反向思维,想的时候从前往后想,从前往后推算,比如