求阶乘n!的递归算法

 我来答
梦如人生Dream
推荐于2019-11-09 · TA获得超过6907个赞
知道答主
回答量:224
采纳率:61%
帮助的人:12万
展开全部

#include
double fun(int n);
int main(void)
{
int n;
printf("Enter n:");
scanf("%d",&n);
printf("%lf\n",fun(n));
return 0;
}
double fun(int n)
{
if(n==0||n==1)
return 1;
else
return n*fun(n-1);
}

程序调用自身称为递归( recursion).它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解.

递归的能力在于用有限的语句来定义对象的无限集合。

一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

  • 1

    ubuntu 14.04 linux c

    gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2

  • 2

    #include <stdio.h>

    #include <string.h>

    #include <stdlib.h>

    long factorial(int n)

    {

    if(n == 1)

    return 1;

    else

    return n*factorial(n-1);

    }

    int main(int argc,char *argv[])

    {

    int n = 0;

    if(argc != 2)

    {

    printf("input error,exit!!\n");

    return -1;

    }

    n = atoi(argv[1]);

    printf("%d! = %ld\n",n,factorial(n));

    return 0;

    }

  • 3

    root@linux:~/code# gcc -o factorial factorial.c 

    root@linux:~/code# ./factorial 6

    6! = 720

创作者fjslf877
2022-08-25 · 四川普通高校专升本考试-计算机基础
创作者fjslf877
采纳数:7 获赞数:32

向TA提问 私信TA
展开全部
算法步骤:
(1)初始化,n=0时,则n!=1;n=1时,则n!=1;
(2)当n>1,则n!=n*(n-1)!
(3)输入n的值;
(4)递推阶段,n!=n*(n-1)!,(n-1)!=(n-1)*(n-2)!...1!=1,0!=1;
(5)回归阶段,逐级返回,在得到(n-1)!的结果后返回得到n!;
(6)输出n!的值;
参考资料:《大学计算机-计算思维导论》,清华大学出版社2019
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2019-10-21 · TA获得超过1.6万个赞
知道答主
回答量:11.7万
采纳率:4%
帮助的人:6230万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式