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

news2024/9/24 19:22:20

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

引言:

        阶乘是基斯顿·卡曼(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()函数本身 
}

四、运行结果: 

六、总结 :

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1236925.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python精讲 | 超好用的f-string和Python3.12的新增特性

大家好&#xff0c;欢迎来到 Crossin的编程教室 &#xff01; 上个月&#xff0c;Python发布了3.12版本&#xff0c;新增了一些特性&#xff0c;并且提升了效率。这个在之前文章中有提过&#xff1a;Python3.12发布,性能提升5% 新增特性之一&#xff0c;就是扩展了f-string的语…

【教3妹学编程-算法题】最大异或乘积

3妹&#xff1a;2哥&#xff0c;你有没有看到新闻“18岁父亲为4岁儿子落户现身亲子鉴定” 2哥 : 啥&#xff1f;18岁就当爹啦&#xff1f; 3妹&#xff1a;确切的说是14岁好吧。 2哥 : 哎&#xff0c;想我30了&#xff0c; 还是个单身狗。 3妹&#xff1a;别急啊&#xff0c; 2…

代码随想录第六十三天 | 单调栈:寻找 左边 / 右边 距离当前元素最近的 更小 元素的 下标(暴力,双指针,单调栈)(84);代码随想录主要题目结束

1、寻找 左边 / 右边 距离当前元素最近的 更小 元素的 下标 1.1 leetcode 84&#xff1a;柱状图中最大的矩形 第一遍代码思路错了&#xff0c;如&#xff1a;输入[2,1,2]&#xff0c;对于2&#xff0c;因为比栈顶元素1大&#xff0c;然后就会直接得出2&#xff08;1&#xff…

wincc定时器功能介绍

1定时器功能介绍 WinCC中定时器的使用可以使WinCC按照指定的周期或者时间点去执行任务&#xff0c;比如周期执行变量归档、在指定的时间点执行全局脚本或条件满足时打印报表。WinCC已经提供了一些简单的定时器&#xff0c;可以满足大部分定时功能。但是在有些情况下&#xff0c…

python plot绘图

使用python绘制t-sne图&#xff0c;并保存 一下是一个将que_im_features向量可视化的例子&#xff1a; def emb_save(que_im_features,i):# 向量[75, 640, 11, 11], episodeimport numpy as npimport pandas as pdfrom sklearn import manifoldimport matplotlib.pyplot as p…

西门子S7-200SMART常见通讯问题解答

1台200SMART 如何控制2台步进电机&#xff1f; S7-200SMART CPU最多可输出3路高速脉冲&#xff08;除ST20外&#xff09;&#xff0c;这意味着可同时控制最多3个步进电机&#xff0c;通过运动向导可配置相应的运动控制子程序&#xff0c;然后通过调用子程序编程可实现对步进电…

SpringCloud 微服务全栈体系(十六)

第十一章 分布式搜索引擎 elasticsearch 六、DSL 查询文档 elasticsearch 的查询依然是基于 JSON 风格的 DSL 来实现的。 1. DSL 查询分类 Elasticsearch 提供了基于 JSON 的 DSL&#xff08;Domain Specific Language&#xff09;来定义查询。常见的查询类型包括&#xff1…

Mybatis和MybatisPlus:数据库操作工具的对比

目录 什么是mybatis 什么是mybatisplus MyBatis-Plus&#xff1a;为简化数据库操作而生的强大工具 一、MyBatis-Plus的背景和概述 二、MyBatis-Plus的主要特点 三、如何使用MyBatis-Plus mybatis-Plus的优势 什么是Hibernate Hibernate&#xff1a;Java开发者的数据持久…

基于鹰栖息算法优化概率神经网络PNN的分类预测 - 附代码

基于鹰栖息算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于鹰栖息算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于鹰栖息优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络…

vue3的单组件的编写(二)--通过对比vue2来讲解

&#x1f42f; 单组件的编写(二) 主要讲了 &#x1f308; 响应式数据的变化 响应式数据是MVVM数据变驱动编程的特色&#xff0c; VUE的设计也是受 MVVM模型的启发&#xff0c;大部分开发者选择MVVM框架都是因为数据驱动编程比传统的事件驱动编程来的方便。而选择vue&#xff…

maven打包项目,然后给其他项目引用

A项目&#xff08;这个项目需要被打包&#xff0c;作为被引入的项目&#xff09;&#xff0c;不需要启动类&#xff0c;因为作为公共模块被B项目引入&#xff1a; package com.yunya.mvndependontest.rest;import org.springframework.web.bind.annotation.RequestMapping; im…

git分支命名规范

https://www.cnblogs.com/wq-9/p/16968098.html

绝地求生:想玩以前的老地图

小编是22年8月左右开始玩的&#xff0c;更早以前跟同学偶尔玩过几次&#xff0c;所以萨诺2.0玩过&#xff0c;不过那时候菜的还不如人机&#xff0c;死了都看不到人在哪&#xff0c;所以对地图没啥印象&#xff0c;比较有印象的是地图色调变得很黄昏。 自闭城 遗迹 这是迪厅&am…

智能座舱架构与芯片- (5) 硬件篇 下

四、短距无线连接 随着汽车智能化的发展与新型电子电气架构的演进&#xff0c;传统车内有线通信技术存在着诸多痛点&#xff1a; 线束长度增加&#xff1a;由于智能化与自动化的发展&#xff0c;车内传感器和执行器均大幅增加。采用有线技术连接&#xff0c;则线束长度&#…

【带你读懂数据手册】CN3702 一款锂电池充电芯片

大家在学习智能车或者飞行器的时候&#xff0c;是不是外接一个电池&#xff1f;最近刚好学习了一款充电芯片&#xff0c;来和大家分享一下&#xff0c;也算是我的一点点笔记。 一款7.4V锂电池&#xff0c;基本上也满足了单片机的外设&#xff0c;如果需要12V或者24V的电压&…

微信收款助手消息不弹窗的解决办法

最近在做微信个人收款的回调&#xff0c;主要方法是根据通知栏截取收款信息&#xff0c;然后进行回调。 其中&#xff0c;发现一个问题&#xff0c;就是微信版本某次升级后&#xff0c;发现微信收款时不弹出消息了。 于是找到了这个解决方法&#xff0c;遇到相同问题的同学们…

(01)vite 从启动服务器开始

文章目录 前言在浏览器中使用es模块初始化环境vite依赖预构建解决了什么问题创建vite.config.js配置vite为什么vite.config.js可以用esmodule规范 前言 Vite&#xff08;发音为"veet"&#xff09;是一种现代化的前端构建工具&#xff0c;旨在提供快速的开发体验。它…

【攻防世界-misc】simple_transfer

1.下载并打开文件&#xff0c; 2.这个文件是一个pcap文件&#xff0c; 用wireshark打开&#xff0c;并按上图步骤操作&#xff0c; 会自动定位到有flag的这个信息行&#xff0c;这时需要右键追踪该信息的tcp流即可。 向下查找时&#xff0c;可以看到有一个pdf文件在这个里面&…

【Linux】Linux中的基本概念

Linux中的基本概念 1. 路径分隔符/2. 当前目录 .3. 返回上级目录 . .目录结构&#xff1a;多叉树 4. 路径5. 路径 { 绝对路径 相对路径 }6. * 通配符 指定路径下的所有文件7. 同级目录下&#xff0c;不允许存在同名文件&#xff0c;或者同名目录8. 命令的本质就是可执行文件9…