编写函数求阶乘(完整版)
一.编写函数
1.基础
//用函数编写 计算整数n的阶乘
#include<stdio.h>long Fact(int n);
int main(void)
{int m;//给出整数求阶乘,先定义整数和阶乘long ret;printf("Input m:");scanf("%d", &m);ret = Fact(m);printf("%d! = %ld\n", m, ret);return 0;
}long Fact(int n)
{int i;long result = 1;//累加定义结果为0累乘定义结果为1for(i=2; i<=n; i++)//前面已经定义过result初值为1,可以直接从2开始循环{result = result * i;}return result;
}
2.阶乘函数 增加参数合法性的检查
long Fact(int n)
{int i;long result=1;//增加对函数入口参数合法性的检查if(n<0){printf("Input data error!\n");}else{for(i=2; i<=n; i++){result = result * i;}return result;//这个return必须在else内,因为在n<0时在if里有对应的输出}}
3.增加对函数入口参数和函数返回值的检验
注:无符号整型数永远都不可能为负值
#include<stdio.h>
unsigned long Fact(unsigned int n);
int main(void)
{int m;do{printf("Input m(m>0):");scanf("%d", &m);}while(m<0);//增加对输入数据的限制printf("%d!=%lu\n", m, Fact(m));return 0;
}
unsigned long Fact(unsigned int n)
{//不能在函数里检查输入数据,因为n已经被定义为无符号整型变量unsigned int i;unsigned long result = 1;for(i=2;i<=n;i++){result = result * i;}return result;}
二.函数的应用
#include<stdio.h>
unsigned long Fact(unsigned int n);
int main(void)
{int m, k;unsigned long p;do{printf("Input m,k (m>=k)");scanf("%d,%d", &m, &k);}while(m<k||m<=0||k<0);p=Fact(m)/(Fact(k)*Fact(m-k));printf("p=%lu\n", p);return 0;
}unsigned long Fact(unsigned int n)
{unsigned int i;unsigned long result = 1;for(i=2;i<=n;i++){result = result * i;}return result;}
三、递归//尽量用迭代法替代递归
1.迭代与递归的区别
迭代在循环条件为假时终止循环,递归在遇到基线情况是终止递归。
2.先找到最简的问题,当函数递归调用到最简形式即满足基线情况时,递归调用结束,然后逐级将函数返回值返回给上一级调用者
四、函数
2.用递归方法实现阶乘计算函数
#include<stdio.h>
long Fact(int n);
int main(void)
{int n;long result;printf("Input n:");scanf("%d", &n);result = Fact(n);if(result==-1)//处理非法数据{printf("n<0,data error!\n");}else{printf("%d!=%ld\n", n, result);}return 0;
}long Fact(int n)
{if(n<0)//处理非法数据{return -1;}else if (n==0||n==1)//基线情况{return 1;}else{return (n*Fact(n-1));}}
五、递归函数的应用
Fibonacci数列
#include<stdio.h>
long Fib(int n);
int main(void)
{int n, i, x;//定义printf("Input n:");//x是最终结果,n是输入的值,这次要多定义一个i,因为要输出数列有很多数要用循环scanf("%d", &n);for(i=1; i<=n; i++)//运算,输出{x=Fib(i);printf("Fib(%d)=%d\n", i, x);}return 0;
}long Fib(int n)
{if(n==1){return 0;}else if (n==2){return 1;}else{return (Fib(n-1)+Fib(n-2));}
}
编写函数求阶乘(完整版)相关推荐
- EduCoder-程序设计技术R-函数-(第1关:求和)(第2关:回文数计算)(第3关: 编写函数求表达式的值)(第4关:阶乘数列)(第5关:亲密数)(第6关:公约公倍数)
目录 第1关:求和 代码示例 第2关:回文数计算 代码示例 第3关: 编写函数求表达式的值 代码示例 第4关:阶乘数列 代码示例 第5关:亲密数 代码示例 第6关:公约公倍数 代码示例 第1关:求和 ...
- 【勇敢牛牛,不怕困难】有手就行栏目:头歌教学平台 - 湖南工业大学刘强老师的C语言函数实战课堂作业答案 - > - > {求和+回文数计算+编写函数求表达式的值+阶乘数列+亲密数+公约数公倍数求解}
第一关:求和 任务描述 题目描述:给你一个n,要求你编写一个函数求1+2+-+n. 输入 输入一个n 输出 输出1+2+-+n的和 测试说明 样例输入: 100 样例输出: 5050 分析: 这个是真 ...
- mysql编写函数 求1 n 偶数之和,编写求1 2 3 - n的函数.在main函数中调用该函数
输入两个正整数m,n,编写求阶乘的函数,计算m!/(n!*(m-n)!). C语言函数解答,谢谢. #includelongfactorial(intm,intn){longsum=1,sum1=1; ...
- 编写函数求两个数的最大公约数,采用递归法计算两数的最大公约数。
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: [实验案例3:函数的递归调用] 编写函数求两个数的最大公约数,采用递归法计算两数的最大公约数. [实验指导] 分析:m.n为两 ...
- c语言中求大于的函数,c语言编写函数,求一组数中大于平均值的数的个数.
C语言编写程序 给定一组数,求大于0,等于0,小于0的数据个数 #define N 10 main(){int num1=0,num2=0,num3=0,i;for(i=0;i 一道C语言题目:求一组 ...
- c语言学习-编写函数求x的n次方的值
编写函数求x的n次方的值 程序流程图: 代码: #include<stdio.h> long mul(int j ,int k) {int i; long mu=1; for(i=0;i& ...
- 实验2.5 用递归的方法编写函数求Fibonacci 级数,观察递归调用的过程
题目 用递归的方法编写函数求Fibonacci 级数,观察递归调用的过程 AC的C++代码如下: #include<iostream> using namespace std; int f ...
- 编写函数求区间[200,3000]中所有的回文数, 回文数是正读和反读都是一样的数
题目要求: 编写函数求区间[200,3000]中所有的回文数, 回文数是正读和反读都是一样的数.如525, 1551 无输入 输出 输出区间[200,3000]中所有的回文数,一行一个回文数, 不需要 ...
- C语言面试题--已知整形变量在内存中占4个字节的空间,现有一无符号整形变量a = 0x20190125,请编写函数求出变量a所占内存每个字节的值是多少?
已知整形变量在内存中占4个字节的空间,现有一无符号整形变量a = 0x20190125,请编写函数求出变量a所占内存每个字节的值是多少? 用共用体方法:共用体内的空间是公用的,每一个成员都可以访问共用 ...
最新文章
- 关闭Android/iPhone浏览器自动识别数字为电话号码
- JVM学习笔记二:JVM参数
- 动态时间规整-DTW算法
- hdu 2579 BFS
- php 返回object,深入分析使用mysql_fetch_object()以对象的形式返回查询结果
- sql实现从两个表获取字段组成表数据再插入到函数表中
- Python中直接查看对象值和使用print()输出的区别
- readyboost提升明显吗_主动降噪影响音质吗?为什么降噪耳机打开降噪后音质会有明显提升...
- 免费Ebook 分享《Silverlight for Windows Phone Toolkit in Depth》
- Android 文本监听接口TextWatcher详解
- Ubuntu卸载WPS安装Libreoffice
- 鸿蒙系统合作的全屋智能,不断升级“常用常新”搭载鸿蒙系统的全屋智能有多酷?...
- 个人信息安全规范----6、个人信息的委托处理、共享、转让、公开披露
- 深入浅出Spring Cloud整合dubbo
- 鲸探发布点评:9月1日发售《新石器黄玉猪龙形珮》数字藏品
- 数据集下载OTB,VOT,UAV,鸢尾花
- 野指针,数组指针,指针数组
- python基础知识下载_python基础知识(实用)
- 软件定义存储(SDS)之入门
- 动手学深度学习(二十六)——图像增广(一生二,二生三,三生万物?)