阶乘与递归(C语言版)

·相信大家对阶乘其实并不陌生,这是一个数学常识:比如5的阶乘就可以写作:5!=5*4*3*2*1=120

        在数学中,我们可以比较轻易的去求得一些数值较小的阶乘,因为计算量不大;但如果要去求得一个两位数甚至多位数的阶乘,那这个工程量实在是太大了(有时候连按计算机都嫌累!!!),好歹咱是学计算机的,这种没有营养的工作,编一段程序就嘎嘎解决了(^v^___)

        接下来就由我给大家献丑了!

#include <stdio.h>
/*
    递归函数:求阶乘
*/
int factorial(int n){        //factorial是阶乘的英文名哈,我也是百度的~
    int plus=n;                //为了方便解读,我们还是定义一个变量来存放乘积吧
    //阶乘实质其实就是n*(n-1)*(n-2)*···*2*1
    //所以在此处我可以先做一个判断,只要还没有数到1,我们就不断向下乘
    while(n>=2){            
        plus=plus*(n-1);    //这里就是老生常谈的n*(n-1)
        n=n-1;                //计算完以后别忘了改变循环变量
    }
    return plus;
}
int main(){
    int n;
    printf("请输入一个数,并求出它的阶乘:");
    scanf("%d",&n);
    printf("%d!=%d",n,factorial(n));
    return 0;
}

这个是一个比较经典的用循环函数去求阶乘,在这里其实可以延伸出一个概念:那就是递归啦

递归是个好东西(从前有座山,山上有座庙,庙里有个老和尚在讲故事,讲的是从前……)

但是很多人容易把递归给搞混(包括本人),也许有人会想,能用while循环为什么还要用递归函数?闲的?

那在这里我就给大家讲清楚这两者的区别:(我也是copy的)

  • 实现方式不同。递归函数是通过函数自身调用自身来实现的,它通常用于处理具有层次结构的任务,如遍历树状数据或执行菜单操作;循环函数则通过迭代来实现,它包括for、while、do-while等语句,用于重复执行某些代码直到满足特定条件。13456789
  • 内存消耗不同。递归函数在运行时可能会占用更多的内存,尤其是在处理大型数据结构或进行深度递归时,可能导致堆栈溢出;循环函数通常不需要函数调用,因此在内存使用上更为高效。149
  • 代码的可读性和简洁性不同。递归函数通常具有更高的代码简洁性和易于理解的特点,但有时难以跟踪函数的调用层次;循环函数则相对简单明了,易于阅读和维护。123
  • 适用场景不同。递归函数适合处理具有明确递归终止条件的问题,如数据结构操作、算法实现等;循环函数则适用于需要重复执行某些操作直到满足条件的情况,如数值计算、列表遍历等。

 在这里我给大家准备了一个非常经典的递归问题:(大家一起探讨,请大家斧正!!!)

在这里我也给大家准备好了完整的程序,请各位看管批判!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值