C语言——用递归函数计算n!

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
      比别人多一点努力,你就会多一份成绩!

引言:

        阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号,是数学术语

        一个正整数的阶乘factorial)是所有小于及等于该数的正整数,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。

        亦即n!=1×2×3×...×(n-1)×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

一、题目:

        用递归函数计算n!

二、 所需知识:(函数递归)

        C 语言允许函数直接或间接地调用它自身,这种调用形式称为递归调用。含有递归调用的函数称为递归函数。若函数在函数体内直接调用函数自身,称为直接递归。若某函数调用其他函数,而其他函数又调用了本函数,这一过程称为间接递归

        递归法是利用一个问题与其子问题的递推关系来解决问题,通常把一个问题层层转化为一不与原问题相同或相似的但规模较小的子问题来求解。
        递归在解决某些问题时,是一个十分有用的方法,它可以使某些看起来不容易解决的问题变得容易解决,写出的程序也比较简洁。但是递归通常要花较多的机器时间和占用较多的存储空间。
如果一个问题可以用递归的方法解决,则这个问题必须满足以下两个条件:

        (1) 该问题能分解为若干个子问题,子问题与原问题相同或相似但规模较小
        (2) 该问题的子问题存在最简形式,即递归的边界

        每调用一次函数,都要给函数的形参变量和函数内部的局部变量分配新的存储单元,同时,函数代码以新变量重新开始执行。当递归调用返回时,本次的形参变量和函数内部变量的内存单元释放,并返回到函数上次调用处。虽然递归程序构造比较简单,但是由于递归程序需要使用大量的存储空间,因此它的执行效率较低。 

三、代码实现:

#include<stdio.h>
long factorial(int);//声明函数factorial() 
int main(){
	int n;
	long y;
	printf("Input a integer number:");
	scanf("%d",&n);
	y=factorial(n);//调用函数factorial() 
	printf("%d!=%ld",n,y);
} 
long factorial(int n){//定义函数factorial(),采用递归方法实现 
	if(n==0||n==1) return 1;
	else return factorial(n-1)*n;//factorial()函数体中又调用factorial()函数本身 
}

四、运行结果: 

六、总结 :

        递归可以看成两个过程,一是回缩,而是递推,回缩是递归的前半程,递推是递归的后半程。

        只要调用,就要分配不同的空间

        最后,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。若这篇文章中有哪些不正确的内容,欢迎大家在评论区和我交流讨论!

  • 21
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: 如果要用C语言实现递归,需要先定义一个递归函数,并在函数内部使用自身,直到满足递归结束的条件为止。 例如,要实现计算阶乘的递归函数,可以这样定义: ``` #include <stdio.h> int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n-1); } } int main() { int num, result; printf("Enter a positive integer: "); scanf("%d", &num); result = factorial(num); printf("%d! = %d\n", num, result); return 0; } ``` 在这个程序中,我们定义了一个名为`factorial`的递归函数,在函数内部,如果输入的数字为0,就返回1,否则返回该数字乘上`factorial(n-1)`的结果。 ### 回答2: 递归是一种编程技术,在C语言中也可以使用递归来解决一些问题。递归函数是指在函数定义中调用自身的函数。使用递归需要注意控制递归的终止条件,否则可能会导致无限递归,使程序崩溃。 为了更好地说明递归的实现,我们以一个经典的例子——计算阶乘来进行说明。阶乘的定义是指正整数n与小于等于n的所有正整数的乘积。我们可以使用递归函数来实现阶乘的计算。 下面是一个使用C语言实现递归计算阶乘的例子: ```c #include <stdio.h> int factorial(int n) { if(n <= 1) { // 基本情况,退出递归 return 1; } else { return n * factorial(n-1); // 递归调用自身 } } int main() { int number; printf("请输入一个正整数:"); scanf("%d", &number); printf("%d的阶乘为:%d\n", number, factorial(number)); return 0; } ``` 在这个例子中,我们定义了一个名为factorial的递归函数,它接受一个整数n作为参数。当n不小于1时,递归函数会调用自身,将问题规模缩小为n-1。当n等于1时,递归函数返回1,终止递归。 在主函数main中,我们通过用户输入一个正整数number,然后调用递归函数factorial计算number的阶乘,并将结果打印出来。 递归是一种灵活且强大的编程技术,但需要注意设置递归终止条件,并合理处理递归过程中的参数传递和计算过程,以避免出现死循环和无限递归的情况。 ### 回答3: 使用C语言实现递归,需要注意以下几个方面: 1、定义递归函数:在C语言中可以定义一个函数,其中函数内部调用自身,即可实现递归。 2、设置递归出口:在递归函数中,需要设置一个递归出口,即当满足某个条件时,递归停止,避免无限循环。 3、传递参数:递归函数可以传递参数,参数的值会不断更新,用于控制递归的运行。 4、返回值:递归函数可以有返回值,表示递归调用的结果,可以用于需要递归结果的操作。 下面是一个用C语言实现的例子,计算n的阶乘: ```c #include <stdio.h> int factorial(int n){ // 递归出口 if(n == 0 || n == 1){ return 1; } else{ // 递归调用 return n * factorial(n-1); } } int main(){ int n = 5; int result = factorial(n); printf("%d的阶乘是:%d\n", n, result); return 0; } ``` 上述代码中,定义了一个名为`factorial`的递归函数,用于计算n的阶乘。在函数内部,首先判断n是否等于0或1,如果是则返回1,作为递归出口;否则,调用自身传入n-1,并将结果乘以n,返回给上一层递归调用。在程序的主函数中,调用递归函数并输出结果。最终输出5的阶乘是120。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梵豪

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值