为什么我们不能直接使用它呢main?
为什么要有递归呢?
#include<stdio.h>
int factorial(int n);
int main()
{
int n;
printf("Enter an positive integer: ");
scanf("%d",&n);
printf("Factorial of %d = %ld", n, factorial(n));
return 0;
}
int factorial(int n)
{
if(n!=1)
return n*factorial(n-1);
}
Run Code Online (Sandbox Code Playgroud)
您不必使用递归。因为 C 不支持所谓的尾部递归调用优化,所以您应该避免使用可以用简单循环代替的递归。但 C 确实支持递归,如果我们不注意它不是最优代码,那么这样的阶乘就是递归函数的最简单的例子。
实际需要的递归的最简单用例可能是目录树循环。如果您尝试在后一种情况下用循环替换递归,您将得到可读性大大降低的代码,并且您仍然需要一个具有 O(N) 内存的堆栈,其中 N 是最大目录嵌套级别,因此,在大多数常见情况下,您不会从这种优化尝试中获得任何有用的结果。
另外,请注意 vanilla C 缺乏对动态数据结构的内置支持。当然,您可以通过使用可通过malloc()、realloc()和free()C 运行时库的函数访问的堆内存来实现可变大小的堆栈,但这种方法会增加项目的复杂性。您必须注意指针以避免泄漏和内存损坏。