gpt4 book ai didi

c - 为什么递归用于查找数字的阶乘?

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:24 26 4
gpt4 key购买 nike

为什么我们不能直接在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);
}

最佳答案

您不必使用递归。因为 C 不支持所谓的尾递归调用优化,所以您应该避免递归,因为递归可以用简单的循环代替。但是C确实完全支持递归,而且这样的阶乘是递归函数的最简单的例子,如果我们不注意它不是最优代码的话。

实际需要的最简单的递归用例可能是目录树循环。如果您在后一种情况下尝试用循环替换递归,您将获得可读性较低的代码,并且您仍然需要一个具有 O(N) 内存的堆栈,其中 N 是最大目录嵌套级别,因此,在大多数常见情况下,您不会从这种优化尝试中获得任何有用的东西。

此外,请注意 vanilla C 缺乏对动态数据结构的内置支持。当然,您可以通过使用可通过 malloc()realloc()free() C 访问的堆内存来实现可变大小的堆栈运行时库的功能,但这种方法会增加项目的复杂性。您将必须照顾好您的指针以避免泄漏和内存损坏。

关于c - 为什么递归用于查找数字的阶乘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33877929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com