求n的阶乘及1~n的阶乘之和
求n的阶乘及1~n的阶乘之和
一、递归求阶乘
- 首先了解递归的概念
递归:程序调用自身的编程技巧称为递归( recursion)。说白了就是一个函数自己调用自己,这种方法就是递归。
>>1.递归分析
2·分析
1.(<0)负数没有阶乘
2.(=0)0的阶乘是0
3.(>0) n! = n * (n-1) * (n-2) * ···* 2 * 1
>>2.代码如下
#include <stdio.h>int factorial(int n);//初始,声明函数int main()
{int n;printf("请输入一个整数:");scanf_s("%d", &n);//输入一任意一个整数if (n < 0){printf("ERROR");//如果n为负数,则输出错误(ERROR)}if (n == 0){printf("0的阶乘是:1\n");//如果n为0,则输出0的阶乘是1}printf("%d的阶乘是:%d\n", n, factorial(n));//调用递归函数,求n的阶乘printf("1到%d的阶乘和是:%d\n", n, sum_factorial(n));return 0;
}//递归函数factorial(int n)
int factorial(int n)
{if (n == 1){return 1;//如果n等于1,返回值为1(由主函数,此时n大于0)}else{return n * factorial(n - 1);//函数内部调用自身,factorial(n)}
}//求阶乘和
int sum_factorial(int n)
{int i;int sum = 0;//初始化总和等于0for (i =1; i <= n; i++){sum += factorial(i);}return sum;
}
递归函数,直接调用
//递归函数factorial(int n)
int factorial(int n)
{if (n == 1){return 1;//如果n等于1,返回值为1(由主函数,此时n大于0)}else{return n * factorial(n - 1);//函数内部调用自身,factorial(n)}
}
//求阶乘和
int sum_factorial(int n)
{int i;int sum = 0;//初始化总和等于0for (i =1; i <= n; i++){sum += factorial(i);}return sum;
}
递归调用的缺点,占用空间内存较大。运算所需开辟空间大,不适合较大数目的递归运算
运行结果
>>3.递归调用的实现:
例如 : 求5的阶乘.
从主函数进入factorial(n)函数
factorial(5) = 5 * factorial(4)factorial(4) = 4 * factorial(3)factorial(3) = 5 * factorial(2)factorial(2) = 5 * factorial(1)factorial(1) = 1factorial(1) = 1的值依次回带入factorial(2),factorial(3),factorial(4) 得到 factorial(5) = 5 * 4 * 3 * 2 * 1 = 120
二、普通方法求阶乘
代码块入下
#include<stdio.h>
int main()
{int i, num;int sum = 1;//定义阶乘数printf("Please input a number:\n");//输入求阶乘数numscanf("%d", &num);for (i = 1; i <= num; i++){sum *= i;}printf("%d的阶乘是:%d\n", num, sum);return 0;
}
运行结果:
求阶乘和
#include<stdio.h>
int main()
{int i, j,fac,num;int sum = 0;//定义阶乘数printf("Please input a number:\n");//输入求阶乘数numscanf("%d", &num);for (i = 1; i <= num; i++)//外层控制,求几个阶乘{fac = 1;//初始化数据,每一次求阶乘从1开始乘for (j = 1; j <= i; j++)//内层控制,求几的阶乘(i等于几即求谁的阶乘){fac *= j;//求阶乘}sum += fac;//求阶乘和}printf("1到%d的阶乘和是:%d\n", num, sum);return 0;
}
运行结果:
Python
def fac(n):if(n==1):return 1else:return n*fac(n-1)n = eval(input("请输入一个正整数:"))
print("{}的阶乘是:{}".format(n,fac(n)))sum = 0
for i in range(1,n+1):sum += fac(i)print("1到{}的阶乘和是:{}".format(n,sum))
运行结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/ed52b4044b4e4e5882b322dd3f385165.png
求n的阶乘及1~n的阶乘之和相关推荐
- matlab 求n 的和,MATLAB求1的阶乘加到n的阶乘和 不要现有的函数,要自己编写出来的...
点击查看MATLAB求1的阶乘加到n的阶乘和 不要现有的函数,要自己编写出来的具体信息 答:myfactorial = @(n) factorial(n) myfactorial = @(n) pro ...
- C++求阶乘四种方法,阶乘和,高精度阶乘
目录 前言 一.阶乘和是什么? 二.题目 三.对错代码对比 1.错误代码 2.正确代码 四,拓展(以下均多组输入) 1,简单阶乘(int递归) 2,阶乘改进1(long long递归) 3,阶乘改进2 ...
- 求n的阶乘的算法框图_阶乘也很有趣:从阶乘到伽玛函数到非整数的阶乘
阶乘运算(Factorial) 任何大于等于1 的自然数n 阶乘: 也即 下表给出了一些自然数的阶乘值: https://en.wikipedia.org/wiki/Factorial 100!是一个 ...
- python1~10阶乘_小练习 python3 阶乘运算
def jiecheng(n): if (n == 0):#处理n为0的情况 print("0的阶乘是:",end='') return 0 s=1 #结果存在S,初始化为1 pr ...
- C++和C语言求解一个数的阶乘以及多个数的阶乘之和
第一个问题,求解一个数的阶乘,一个数的阶乘等于从它本身一直乘到1. 以下为源代码: 第二个问题:求多个数的阶乘之和,通过上面的代码,我们已经会求解一个数的阶乘,那么多个数的阶乘我们只需要再加一个循环, ...
- 双阶乘C语言,c阶乘公式(排列组合与阶乘)
C的计算:下标的数字乘以上标的数字的个数,且每个数字都要-1.再除以上标的阶乘.如:C5 3(下标是5,上标是3)=(5X4X3)/3X2X1. 3X2X1(也就是3的阶乘) A. 公式:n!=n*( ...
- c语言中n的阶乘的流程图,n的阶乘流程图(计算机n的阶乘流程图)
n的阶乘流程图(计算机n的阶乘流程图) 2020-05-24 15:32:32 共10个回答 第一步:让s=1,i=1第二步输入要算的阶乘的对应的正整数n第三步让s=s*i,i=i+1第四步判断i是否 ...
- c语言计算阶乘的倒数和,for循环计算某个数的阶乘、阶乘和及其倒数的阶乘和...
//4的阶乘 int jc = 4; //定义一个变量用来代表要计算的数值 long jd =1; //定义最终输出的阶乘 for(int i = 1; i <= jc;i++) //定义循环加 ...
- 阶乘分之一和java_n的阶乘比上(n+1)的阶乘等于多少-n的阶乘-数学-糜朔德同学
概述:本道作业题是糜朔德同学的课后练习,分享的知识点是n的阶乘,指导老师为白老师,涉及到的知识点涵盖:n的阶乘比上(n+1)的阶乘等于多少-n的阶乘-数学,下面是糜朔德作业题的详细. 题目:n的阶乘比 ...
最新文章
- 2022-2028年中国文化旅游业投资分析及前景预测报告(上中下卷)
- oracle元数据存储在表空间,[Oracle] dbms_metadata.get_ddl 的使用方法总结
- java方法重载和重载方法_Java 8的方法参考进一步限制了重载
- 【2013.4.6】微软暑期实习生答案(zz)
- luogu P1046 陶陶摘苹果
- 计算机专业刚毕业本科生,计算机专业应届本科毕业生自我鉴定
- 聊聊rocketmq的ConsumerIdsChangeListener
- Eclipse安装UML 插件
- Android 递归删除文件和文件夹
- apache下虚拟域名配置
- CodeForces - 982C Cut 'em all!
- poj 2231 Moo Volume 暴力一定超时啊
- 关于SESSION如何产生,由谁产生,保存位置的记录
- 机器人动力学建模之牛顿欧拉法推导
- 用geoda软件进行空间自相关分析示例
- 航空插头的环境性能科普
- 2021年笔迹鉴定收费?江西南昌收费标准是什么?
- 汤唯:在街头卖艺的那些日子
- 相关性扫描匹配CSM与分支限界
- 世界上什么人最重要?什么事最重要?什么时间最重要?