一.编写函数

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));}
}

编写函数求阶乘(完整版)相关推荐

  1. EduCoder-程序设计技术R-函数-(第1关:求和)(第2关:回文数计算)(第3关: 编写函数求表达式的值)(第4关:阶乘数列)(第5关:亲密数)(第6关:公约公倍数)

    目录 第1关:求和 代码示例 第2关:回文数计算 代码示例 第3关: 编写函数求表达式的值 代码示例 第4关:阶乘数列 代码示例 第5关:亲密数 代码示例 第6关:公约公倍数 代码示例 第1关:求和 ...

  2. 【勇敢牛牛,不怕困难】有手就行栏目:头歌教学平台 - 湖南工业大学刘强老师的C语言函数实战课堂作业答案 - > - > {求和+回文数计算+编写函数求表达式的值+阶乘数列+亲密数+公约数公倍数求解}

    第一关:求和 任务描述 题目描述:给你一个n,要求你编写一个函数求1+2+-+n. 输入 输入一个n 输出 输出1+2+-+n的和 测试说明 样例输入: 100 样例输出: 5050 分析: 这个是真 ...

  3. mysql编写函数 求1 n 偶数之和,编写求1 2 3 - n的函数.在main函数中调用该函数

    输入两个正整数m,n,编写求阶乘的函数,计算m!/(n!*(m-n)!). C语言函数解答,谢谢. #includelongfactorial(intm,intn){longsum=1,sum1=1; ...

  4. 编写函数求两个数的最大公约数,采用递归法计算两数的最大公约数。

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: [实验案例3:函数的递归调用] 编写函数求两个数的最大公约数,采用递归法计算两数的最大公约数. [实验指导] 分析:m.n为两 ...

  5. c语言中求大于的函数,c语言编写函数,求一组数中大于平均值的数的个数.

    C语言编写程序 给定一组数,求大于0,等于0,小于0的数据个数 #define N 10 main(){int num1=0,num2=0,num3=0,i;for(i=0;i 一道C语言题目:求一组 ...

  6. c语言学习-编写函数求x的n次方的值

    编写函数求x的n次方的值 程序流程图: 代码: #include<stdio.h> long mul(int j ,int k) {int i; long mu=1; for(i=0;i& ...

  7. 实验2.5 用递归的方法编写函数求Fibonacci 级数,观察递归调用的过程

    题目 用递归的方法编写函数求Fibonacci 级数,观察递归调用的过程 AC的C++代码如下: #include<iostream> using namespace std; int f ...

  8. 编写函数求区间[200,3000]中所有的回文数, 回文数是正读和反读都是一样的数

    题目要求: 编写函数求区间[200,3000]中所有的回文数, 回文数是正读和反读都是一样的数.如525, 1551 无输入 输出 输出区间[200,3000]中所有的回文数,一行一个回文数, 不需要 ...

  9. C语言面试题--已知整形变量在内存中占4个字节的空间,现有一无符号整形变量a = 0x20190125,请编写函数求出变量a所占内存每个字节的值是多少?

    已知整形变量在内存中占4个字节的空间,现有一无符号整形变量a = 0x20190125,请编写函数求出变量a所占内存每个字节的值是多少? 用共用体方法:共用体内的空间是公用的,每一个成员都可以访问共用 ...

最新文章

  1. 关闭Android/iPhone浏览器自动识别数字为电话号码
  2. JVM学习笔记二:JVM参数
  3. 动态时间规整-DTW算法
  4. hdu 2579 BFS
  5. php 返回object,深入分析使用mysql_fetch_object()以对象的形式返回查询结果
  6. sql实现从两个表获取字段组成表数据再插入到函数表中
  7. Python中直接查看对象值和使用print()输出的区别
  8. readyboost提升明显吗_主动降噪影响音质吗?为什么降噪耳机打开降噪后音质会有明显提升...
  9. 免费Ebook 分享《Silverlight for Windows Phone Toolkit in Depth》
  10. Android 文本监听接口TextWatcher详解
  11. Ubuntu卸载WPS安装Libreoffice
  12. 鸿蒙系统合作的全屋智能,不断升级“常用常新”搭载鸿蒙系统的全屋智能有多酷?...
  13. 个人信息安全规范----6、个人信息的委托处理、共享、转让、公开披露
  14. 深入浅出Spring Cloud整合dubbo
  15. 鲸探发布点评:9月1日发售《新石器黄玉猪龙形珮》数字藏品
  16. 数据集下载OTB,VOT,UAV,鸢尾花
  17. 野指针,数组指针,指针数组
  18. python基础知识下载_python基础知识(实用)
  19. 软件定义存储(SDS)之入门
  20. 动手学深度学习(二十六)——图像增广(一生二,二生三,三生万物?)

热门文章

  1. Android单元测试读写文件,Android-单元测试
  2. Java面试突击(6):分库分表
  3. 给LINUX安装JDK
  4. i7 9750h和r7 5800h差距大不大
  5. Win10系统Ping端口及利用telnet命令Ping 端口
  6. 计算机组成与体系架构
  7. Python的基本数据类型
  8. 对于DFA、NFA理解
  9. 【LaTeX排版】LaTeX论文模版
  10. golang爬虫抓取商品报价