计算阶乘的程序在数学上可以定义为:
一、迭代
在使用迭代这个方法时,首先我们应该了解什么是迭代:
迭代,顾名思义就是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。重复执行一系列运算步骤,从前面的量依次求出后面的量的过程。此过程的每一次结果,都是由对前一次所得结果施行相同的运算步骤得到的------换句话说就是通过循环反复的方法进行求值,而每一个得到的结果都是需要建立在前面一次计算结果的基础上得出来的。
下面我们就利用迭代(通常就是循环的方式)进行n的阶乘的运算:
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int fact = 1;
for (int i = 1; i <= n; i++)
{
fact *= i;
}
printf("%d", fact);
return 0;
}
二、递归
要使用递归解决问题,我们同样需要了解什么是递归:
我们用一个故事来阐述一下什么叫递归:
大雄在房里,用时光电视看着从前的情况。电视画面中的那个时候,他正在房里,用时光电视,看着从前的情况。电视画面中的电视画面的那个时候,他正在房里,用时光电视,看着从前的情况……
我们知道递归必须具备两个条件,一个是调用自己,一个是有终止条件。这两个条件必须同时具备,且一个都不能少。并且终止条件必须是在递归最开始的地方,也就是下面这样:
下面我们就利用递归的方法来求出n的阶乘:
#include<stdio.h>
int Func(int n)
{
if (n < 2)
return 1;
else
return n*Func(n - 1);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Func(n);
printf("%d", ret);
return 0;
}
我们来看看下面递归的过程:
这种递归还是很简单的,我们求f(5)的时候,只需要求出f(4)即可,如果求f(4)我们要求出f(3)……一层一层的调用,当n=1的时候,我们直接返回1,然后再一层一层的返回,直到返回f(5)为止。
递归的目的是把一个大的问题细分为更小的子问题,我们只需要知道递归函数的功能即可,不要把递归一层一层的拆开来想,如果同时调用多次的话这样你很可能会陷入循环而出不来。比如上面的题中要求f(5),我们只需要计算f(4)即可,即f(5)=5*f(4);至于f(4)是怎么计算的,我们就不要管了。因为我们知道f(n)中的n可以代表任何正整数,我们只需要传入4就可以计算f(4)。
好了,求n的阶乘的讲解就到这了,如果有写得不好的地方。欢迎在评论区指正,感谢您的阅读!