本文概述
根据定义, 非负整数的阶乘是以下小于或等于n的所有正整数的乘积, 如以下数学符号所示:
阶乘在数学中很重要, 因为它们在组合数学, 泰勒展开和数论中都遇到。例如, 阶乘n是一个人可以排列n个不同对象的方式的数量。如果你正在学习计算机科学, 编程中要解决的最常见任务之一就是如何获取数字的阶乘。
在本文中, 我们将说明如何使用非常简单的逻辑在C中获得正整数的阶乘。
A.迭代
执行和理解从n数获得阶乘的逻辑的最简单方法是使用for循环。你将需要定义一个for循环, 该循环将从1迭代到给定的n个数字。在每次迭代中, 最初具有1值的事实变量将使用其自身与当前迭代的索引相乘的结果进行更新。在以下示例中, 我们将提示你输入要计算的数字, 并在最后打印结果:
#include <stdio.h>
int main()
{
// Note that initially, the fact variable is equals to 1
int c, n, fact = 1;
// Prompt user for the number to calculate, it can be statically defined as fact if you want.
printf("Enter a number to calculate its factorial: \n");
scanf("%d", &n);
// Calculate factorial
for (c = 1; c <= n; c++){
fact = fact * c;
}
// Print result
printf("Factorial of %d is: %d\n", n, fact);
return 0;
}
你可以根据需要将其转换为函数:
#include <stdio.h>
// declare method before using it to prevent error: conflicting types for 'factorial'
long factorial(int);
// Usage example:
int main()
{
int fact = 10;
// Prints: Factorial of 10 is: 3628800
printf("Factorial of %d is: %d\n", fact, factorial(fact));
return 0;
}
// Function that returns the factorial of a n number
long factorial(int n)
{
int c;
long result = 1;
for (c = 1; c <= n; c++){
result = result * c;
}
return result;
}
B.递归方式
在编程中, 递归是一种函数调用自身的技术, 例如, 在下面的代码示例中, 阶乘函数将调用自身:
#include <stdio.h>
// declare method before using it to prevent error: conflicting types for 'factorial'
long factorial(int);
// Usage example:
int main()
{
int fact = 10;
// Prints: Factorial of 10 is: 3628800
printf("Factorial of %d is: %d\n", fact, factorial(fact));
return 0;
}
// Function that returns the factorial of a n number
long factorial(int n)
{
if (n == 0){
return 1;
}else{
return(n * factorial(n-1));
}
}
请注意, 在递归中必须定义函数。进行你的首选方式是什么?
编码愉快!
评论前必须登录!
注册