设计求n!(n为正整数)的非递归算法和递归算法
时间: 2024-09-28 19:10:15 浏览: 54
设计一个计算阶乘的非递归算法通常可以采用循环结构,例如使用for或while循环迭代相乘的过程。以下是Python的一个例子:
**非递归算法(迭代法)**:
```python
def factorial_iterative(n):
result = 1
for i in range(1, n+1):
result *= i
return result
```
在这个函数中,我们从1开始乘到n,每次将结果乘以当前的数。
**递归算法**:
虽然递归不是必需的,但在某些语言如Python中编写起来更简洁,尽管效率较低因为存在函数调用开销。这里是递归版本:
```python
def factorial_recursive(n):
if n == 0 or n == 1:
return 1
else:
return n * factorial_recursive(n - 1)
```
这个函数通过基本情况`n == 0` 或 `n == 1` 返回1,然后对于大于1的n,它会调用自身并将结果乘以n。
相关问题
c语言设计求n!(n为正整数)的非递归算法和递归算法
在C语言中,计算阶乘(n!)有递归和非递归两种常见的算法。
**非递归算法(迭代法)**:
```c
#include <stdio.h>
unsigned long long factorial(int n) {
if (n == 0 || n == 1)
return 1;
unsigned long long result = 1;
for (int i = 2; i <= n; ++i)
result *= i;
return result;
}
int main() {
int n;
printf("Enter a positive integer: ");
scanf("%d", &n);
printf("Factorial of %d is %llu\n", n, factorial(n));
return 0;
}
```
在这个非递归版本中,我们通过循环逐个乘以从2到n的所有数字,最终得到结果。
**递归算法**:
```c
#include <stdio.h>
unsigned long long factorial(int n) {
if (n == 0 || n == 1)
return 1;
else
return n * factorial(n - 1);
}
int main() {
int n;
printf("Enter a positive integer: ");
scanf("%d", &n);
printf("Factorial of %d is %llu\n", n, factorial(n));
return 0;
}
```
递归版则是将问题分解成规模较小的问题,即n! = n * (n - 1)!,直到基本情况n=0或1,然后逐层返回并计算结果。
c++设计求n!(n为正整数)的非递归算法和递归算法
在 C++ 中,计算阶乘(n!)可以采用递归算法和非递归算法。
**非递归算法(也称为迭代法)**:
```cpp
#include <iostream>
using namespace std;
long long factorial(int n) {
if (n == 0 || n == 1)
return 1; // 阶乘的基本情况
long long result = 1;
for (int i = 2; i <= n; ++i) {
result *= i;
}
return result;
}
int main() {
int n;
cout << "Enter a positive integer: ";
cin >> n;
cout << "Factorial of " << n << " is: " << factorial(n);
return 0;
}
```
这个算法通过循环从1乘到n,逐步累积结果,直到n=1的情况。
**递归算法**:
```cpp
#include <iostream>
using namespace std;
long long factorial(int n) {
if (n == 0 || n == 1)
return 1; // 递归的基础情况
else
return n * factorial(n - 1); // 递归调用自身,每次减小n
}
int main() {
int n;
cout << "Enter a positive integer: ";
cin >> n;
cout << "Factorial of " << n << " is: " << factorial(n);
return 0;
}
```
在这个算法中,函数不断调用自身,直到达到基本情况才返回值。
阅读全文