一. 递归的定义

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

先序递归和后序递归

#include <stdio.h>

void test(int n);
void test1(int n); void main() { int a = ;
test1(a);
system("pause");
} void test(int n) { if (n > ){ // 递归终止条件,递归一定要有终止条件
printf("n=%d\n",n); // 先序递归 输出结果:10 9 8 7 6 5 4 3 2 1
test1(n-);
}
} void test1(int n) { if (n > ) {
test1(n-);
printf("n=%d\n",n); // 后序递归 输出结果:1 2 3 4 5 6 7 8 9 10
} }

例1:求第n个人的岁数

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

#include <stdio.h>

int getAge(int n);

void main() {

    int a = ;
printf("第%d个人的岁数是:%d\n",a,getAge(a));
system("pause");
} int getAge(int n) { int age;
if (n == ) {
age = ;
}
else{
age = getAge(n - ) + ;
}
return age; }

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

#include <stdio.h>

int getBinary(int n);

void main() {

    int a = ;
getBinary(a);
system("pause");
} //将十进制数转换为二进制数
int getBinary(int n) { int i = n % ;
if (n >= ) {
getBinary(n / );
}
printf("%d",i);
}

例3:斐波那契数列

#include <stdio.h>

int fib(int n);

void main() {

    for (int i = ; i < ; i++) {
printf("第%d项的值为%d\n", i, fib(i));
} system("pause");
} // 斐波那契数列
int fib(int n) { if (n == )
return ;
if (n == )
return ;
if (n > )
return fib(n - ) + fib(n - ); }

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

#include <stdio.h>

int mystrlen(const char *p, int n);

void main() {

    char *a = "hello123";
printf("当前字符串的长度为:%d\n",mystrlen(a,)); system("pause");
} int mystrlen(const char *p, int n) { if (p[n]) { // 这里判断是否到达字符串末尾的0
return mystrlen(p,n+);
}else {
return n;
} }

例5:求n个自然数的和

// 求n个自然数的和
int mysum(int n) {
if (n == ) { // 递归终止条件
return ;
}
return mysum(n - ) + n;
}

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. 【权值分块】bzoj1503 [NOI2004]郁闷的出纳员

    权值分块,离散化非常蛋疼,只能离散化搞…… 需要支持操作:删除<=某个值得所有权值==打标记 O(sqrt(n)) 码长和我的平衡树差不多……速度快3倍左右. #include<cstdi ...

  2. 【小笔记】斜率优化的结论(WC)

  3. java的classpath和path理解

    1)classpath即是类路径的意思,后缀为.java的源程序编译成功之后会生成后缀为.class的类文件.classpath与import关键字是相关的,程序编译的时候,遇到import关键字,编 ...

  4. [Android Memory] Android 的 StrictMode

    android的2.3 之后引入的StrictMode 对网络的访问做了限制啊. public void onCreate() { if (DEVELOPER_MODE) { StrictMode.s ...

  5. python获取linux本机IP

    #!/usr/bin/env python #encoding: utf-8 #description: get local ip address import os import socket, f ...

  6. Chrome插件——一键保存网页为PDF1.0发布

    最新版本:V1.1 下载地址:http://download.csdn.net/detail/bdstjk/5722317 发布时间:2013-7-8 版本号:1.1.7.80 更新内容: 1.增加检 ...

  7. 一起來玩鳥 Starling Framework 簡介

    開場 Starling Framework是一套Flash 2D遊戲開發"工具",是使用Flash最新的Stage3D API建構出來的一套Framework.最大優點在於使用GP ...

  8. LeetCode(28)Implement strStr()

    题目 Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if nee ...

  9. java源码阅读ArrayBlockingQueue

    1类签名与简介 public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQ ...

  10. Elasticsearch 理解

    概述 Elasticsearch (ES)是一个基于 Lucene 的开源搜索引擎,它不但稳定.可靠.快速,而且也具有良好的水平扩展能力,是专门为分布式环境设计的. 特性 安装方便:没有其他依赖,下载 ...