【C语言练习(6)—递归求阶乘】

C语言练习(6)


前言

  • 理解递归函数是如何构建,递归函数的用处

问题

  • 请用递归和循环两种方法,求 10 ! 10! 10!值为多少?

问题分析

  • f ( n ) = n ! f(n)=n! f(n)=n!,可以知道 f ( n ) = n ∗ ( n − 1 ) ∗ ( n − 2 ) . . . . . . 3 ∗ 2 ∗ 1 f(n)=n*(n-1)*(n-2)......3*2*1 f(n)=n(n1)(n2)......321,通过用递归的思想可以写成 f ( n ) = n ∗ f ( n − 1 ) f(n)=n*f(n-1) f(n)=nf(n1)
  • 例如: 5 ! = 5 ∗ 4 ∗ 3 ∗ 2 ∗ 1 5!=5*4*3*2*1 5=54321

使用递归方法,首先要构建递归函数,下面给了递归是如何实现的流程图

long f(int m)
{
if (m == 1)
return 1;
else
return m * f(m - 1);
}

取m=3,演示递归如何算的

在这里插入图片描述

使用递归的方法代码如下

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
long f(int m)
{ 
    if (m == 1)
        return 1;
    else
    return m * f(m - 1);
}

int main()
{
    int y = 0;
    int m = 0;
    printf("请输入阶乘数:");
    scanf("%d",&m);
     y =f(m);
     printf("阶乘值为:%d\n",y);
    return 0;
}

使用循环的方法代码如下

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
    int m = 0;
    int i = 0;
    int f = 1;
    printf("请输入阶乘数:");
    scanf("%d",&m);
    for (i = 1; i <= m; i++)
    {
        f = i * f;
    }
     printf("阶乘值为:%d\n",f);
    return 0;
}

结果

使用递归的方法结果在这里插入图片描述

使用循环的方法结果在这里插入图片描述

总结

  • 使用循环和递归的结构求解各有优缺点,使用递归求解复杂的比较方便,写一个递归函数即可实现,但采用循环结构好理解,对于复杂递归不好写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值