一. 递归的定义

函数可以调用自己,这就叫函数的递归。

先序递归和后序递归

  1. #include <stdio.h>
  2.  
  3. void test(int n);
  4. void test1(int n);
  5.  
  6. void main() {
  7.  
  8. int a = ;
  9. test1(a);
  10. system("pause");
  11. }
  12.  
  13. void test(int n) {
  14.  
  15. if (n > ){ // 递归终止条件,递归一定要有终止条件
  16. printf("n=%d\n",n); // 先序递归 输出结果:10 9 8 7 6 5 4 3 2 1
  17. test1(n-);
  18. }
  19. }
  20.  
  21. void test1(int n) {
  22.  
  23. if (n > ) {
  24. test1(n-);
  25. printf("n=%d\n",n); // 后序递归 输出结果:1 2 3 4 5 6 7 8 9 10
  26. }
  27.  
  28. }

例1:求第n个人的岁数

有n个人排成一队,问第n个人多少岁,他回答比前面一个人大2岁,再问前面一个人多少岁,他回答比前面一个人大2岁,一直问到最后问第一个人,他回答10岁

  1. #include <stdio.h>
  2.  
  3. int getAge(int n);
  4.  
  5. void main() {
  6.  
  7. int a = ;
  8. printf("第%d个人的岁数是:%d\n",a,getAge(a));
  9. system("pause");
  10. }
  11.  
  12. int getAge(int n) {
  13.  
  14. int age;
  15. if (n == ) {
  16. age = ;
  17. }
  18. else{
  19. age = getAge(n - ) + ;
  20. }
  21. return age;
  22.  
  23. }

例2:将十进制数转化为二进制数

  1. #include <stdio.h>
  2.  
  3. int getBinary(int n);
  4.  
  5. void main() {
  6.  
  7. int a = ;
  8. getBinary(a);
  9. system("pause");
  10. }
  11.  
  12. //将十进制数转换为二进制数
  13. int getBinary(int n) {
  14.  
  15. int i = n % ;
  16. if (n >= ) {
  17. getBinary(n / );
  18. }
  19. printf("%d",i);
  20. }

例3:斐波那契数列

  1. #include <stdio.h>
  2.  
  3. int fib(int n);
  4.  
  5. void main() {
  6.  
  7. for (int i = ; i < ; i++) {
  8. printf("第%d项的值为%d\n", i, fib(i));
  9. }
  10.  
  11. system("pause");
  12. }
  13.  
  14. // 斐波那契数列
  15. int fib(int n) {
  16.  
  17. if (n == )
  18. return ;
  19. if (n == )
  20. return ;
  21. if (n > )
  22. return fib(n - ) + fib(n - );
  23.  
  24. }

例4:计算一个字符串的长度

  1. #include <stdio.h>
  2.  
  3. int mystrlen(const char *p, int n);
  4.  
  5. void main() {
  6.  
  7. char *a = "hello123";
  8. printf("当前字符串的长度为:%d\n",mystrlen(a,));
  9.  
  10. system("pause");
  11. }
  12.  
  13. int mystrlen(const char *p, int n) {
  14.  
  15. if (p[n]) { // 这里判断是否到达字符串末尾的0
  16. return mystrlen(p,n+);
  17. }else {
  18. return n;
  19. }
  20.  
  21. }

例5:求n个自然数的和

  1. // 求n个自然数的和
  2. int mysum(int n) {
  3. if (n == ) { // 递归终止条件
  4. return ;
  5. }
  6. return mysum(n - ) + n;
  7. }

C语言基础(14)-递归的更多相关文章

  1. 十四. Python基础(14)--递归

    十四. Python基础(14)--递归 1 ● 递归(recursion) 概念: recursive functions-functions that call themselves either ...

  2. C语言基础--循环 递归打印乘法表

    for循环打印乘法表: #include <stdio.h> // for循环打印乘法表 int main(int argc, const char * argv[]) { //矩形 ; ...

  3. Java入门 - 语言基础 - 14.String类

    原文地址:http://www.work100.net/training/java-string.html 更多教程:光束云 - 免费课程 String类 序号 文内章节 视频 1 概述 2 创建字符 ...

  4. go语言基础之递归实现数字累加

    1.实现1+100 = 5050 示例: package main import "fmt" //实现1+2+3+……100 func test01() (sum int) { f ...

  5. C++语言基础(14)-typeid

    typeid可用来判断类型是否相等: 例如有下面的定义: char *str; ; ; float f; 类型比较 结果 类型比较 结果 typeid(int) == typeid(int) true ...

  6. Java语言基础(14)

    1 访问控制修饰符(二) 1)public:公共的,可以用来修饰类,属性,构造方法以及方法,被public修饰的类,属性,构造方法以及方法,可以任意的进行访问. 2)private:私有的,可以用来修 ...

  7. GO学习-(14) Go语言基础之接口

    Go语言基础之接口 接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节. 接口 接口类型 在Go语言中接口(interface)是一种类型,一种抽象的类 ...

  8. D10——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D10 20180906内容纲要: 1.协程 (1)yield (2)greenlet (3)gevent (4)gevent实现单线程下socket多并发 2. ...

  9. D05——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D05 20180815内容纲要: 1 模块 2 包 3 import的本质 4 内置模块详解 (1)time&datetime (2)datetime ...

随机推荐

  1. JVM的内存布局

    JVM的内存布局包括,其中: Java虚拟机在执行Java程序的过程中会把它所管理的内存(线程相关?)划分为若干个不同的数据区域.有些区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结 ...

  2. [Contest20180426]校门外的树

    $\newcommand{\align}[1]{\begin{align*}#1\end{align*}}$题意:对于一个排列$p_{1\cdots n}$构造一个图,如果$i\lt j$且$p_i\ ...

  3. 【费马小定理+快速幂+逆元】BZOJ3240-[NOI2013]矩阵游戏

    [题目大意] 若用F[i][j]来表示矩阵中第i行第j列的元素,则F[i][j]满足下面的递推式:F[1][1]=1F[i,j]=a*F[i][j-1]+b (j!=1)①F[i,1]=c*F[i-1 ...

  4. python3开发进阶-Django框架起飞前的准备

    阅读目录 安装 创建项目 运行 文件配置的说明 三个组件 一.安装(安装最新LTS版) Django官网下载页面 根据官方的图版本,我们下载1.11版本的,最好用! 有两种下载方式一种直接cmd里: ...

  5. [Eclipse]--Error:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path.

    一段时间没用eclipse后,再去打开以前的项目,发现一打开前线标红.查看错误的时候,如下图所示: Error:The superclass "javax.servlet.http.Http ...

  6. yii2.0权限控制 ACF权限

    ACF是一种通过yii\filters\AccessControl类来实现的简单授权 有两种角色 ?:未经认证的游客用户 @:已认证的用户 ACF可同过对角色设置权限控制访问 1)记得引入yii\fi ...

  7. dubbo安装(转载)

    1.   概述 ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.名字服务.分布式同步.组服务等.ZooKeeper的目标就是封装好复杂 ...

  8. [读书笔记] 你早该这么玩Excel

    <你早该这么玩Excel>只教你做两件事:如何设计一张“天下第一表”,你会恍然大悟,以前遇到的种种麻烦是因为做错了表格:如何一分钟“变”出N张表,你会明白表格是“变”出来的,不是“做”出来 ...

  9. 【ArcGIS 10.2新特性】ArcGIS 10.2将PostgreSQL原生数据发布为要素服务

    1.ArcGIS 10.2支持原生数据发布为要素服 有没有将自己已有的空间数据发布为要素服务的需求?有没有将非Esri空间数据类型的数据作为服务在Web端展示的需求?     ArcGIS 10.2 ...

  10. 【SQL Server学习笔记】事务、锁定、阻塞、死锁 sys.sysprocesses

    http://blog.csdn.net/sqlserverdiscovery/article/details/7712068 Column name Data type Description   ...