递归函数 是能够直接或通过另一个函数间接调用自身的函数,调用自身的方法称为递归调用。递归调用的本质是使用同一算法将复杂的问题不断化简,直到该问题解决。

例如求斐波那契数列的某一项算法适用于递归函数实现。斐波那契数列指的是这样一个数列:

0, 1, 1, 2, 3, 5, 8, 13, 21 ...

这个数列从第三项开始,每一项都等于前两项之和。斐波那契数列可以按照如下公式递归定义;

fibonacci(0) = 0		// 处理 0
fibonacci(1) = 1 // 处理 1
fibonacci(n) = fibonacci(n - 1) + fibonacci(n -2) // 处理 1 意外的自然数

完整的程序如下所示:

long fibonacci(long n)
{
if ( n == 1 || n == 2)
{
return n;
}
else
{
return fibonacci(n - 1) + fibonacci(n -2);
// 递归调用自身,将当前问题分解为 2 个分支
}
} int main()
{
long n; // 声明长整型变量,用于保存要斐波那契数列项数
puts("请输入一个正整数:"); // 输出提示信息
scanf("%d", n); // 输入变量 n 的值
printf(斐波那契数列第 %d 项为:%d", n, fibonacci(n)); // 调用 fibonacci()函数
}

main() 函数调用 fibonacci() 函数对自身递归调用。每次调用时,它会判断 n 是否为 0 或者 1。如果条件为真,则返回 n,结束当前函数。如果 n 大于 1,那么函数会生成 2 个递归调用,每个递归调用相比原始的 fibonacci() 函数调用都会更简单,如图 9.2 所示。

【C语言入门教程】5.4 递归的更多相关文章

  1. 《JavaScript语言入门教程》记录整理:运算符、语法和标准库

    目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...

  2. 《Ruby语言入门教程v1.0》学习笔记-01

    <Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...

  3. C语言入门教程-(5)格式化输入输出

    1.输入和输出 在程序的使用中,我们经常可以看的这么一个场景:用户需要输入数据,经过程序运算,得到结果后输出.在C语言中,输入数据和输出数据都是由库函数完成的,通过语句来输入/输出. 2.格式化输出— ...

  4. Go语言入门教程(十)之函数

    Hello 各位小伙伴大家好,我是小栈君,假期一眨眼就过去了.不知道大家玩的是否开心呢? 上次我们讲到了关于Go语言的流程控制,小栈君也希望小伙伴跟着小栈君一步一个脚印的敲一下代码,相互进步.本期我们 ...

  5. c语言该怎么入门?C语言入门教程(非常详细)

    C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言.C语言是计算机产业的核心语言,操作系统.硬件驱动.关键组件.数据库等都离不开C语言:不学习C语言,就不能了解计算机底层. 这套「C语 ...

  6. 《JavaScript语言入门教程》记录整理:入门和数据类型

    目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...

  7. 《JavaScript语言入门教程》记录整理:面向对象

    目录 面向对象编程 实例对象与 new 命令 this关键字 对象的继承 Object对象的方法 严格模式(strict mode) 本系列基于阮一峰老师的<JavaScrip语言入门教程> ...

  8. Go 语言入门教程,共32讲,6小时(已完结)

    Go语言入门教程,共32讲,6小时(完结) 在B站:https://www.bilibili.com/video/BV1fD4y1m7TD/

  9. c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码初级:C语言入门必备(以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言的数 ...

  10. 【转】c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码 初级:C语言入门必备 (以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言 ...

随机推荐

  1. C# List根据某一字段排序 将字段相同的排序到一起

    List<JZJLXQ_Prescription_Item> ciList = new List<JZJLXQ_Prescription_Item>(); List<JZ ...

  2. 一次奇怪的T-shirt展示

    因为这次的第一也是上次的第一然后顺延下来又正好跟女神并列第二,拿到了一件T-shirt.总之,还是应该继续加油.

  3. 解决 Ubuntu 无法调节屏幕亮度的问题(转)

    转http://blog.163.com/tym190@126/blog/static/8776005920143192412477/ 终端输入代码:     在打开文件中找到 GRUB_CMDLIN ...

  4. java连接数据源-读取tomcat数据源配置

    读取数据源配置,获取连接 1.配置数据源 D:\apache-tomcat-7.0.70\conf\context.xml <Resource name="jdbc/news" ...

  5. iOS - 类簇

    类簇是在Objective-C中Foundation Framework中广泛使用的一种设计模式 1.发现类簇(Class Cluster)的踪迹 //*> 执行下面代码 id obj1 = [ ...

  6. 谈谈 ES6 的 Promise 对象

    https://segmentfault.com/a/1190000002928371 前言 开篇首先设想一个日常开发常常会遇到的需求:在多个接口异步请求数据,然后利用这些数据来进行一系列的操作.一般 ...

  7. CSS3-canvas绘制线性渐变

    <!doctype html><html><head><meta charset="utf-8"><title>canv ...

  8. 遍历jsonobject

    遍历jsonobject 1 entrySet.iterator生成迭代器 2 从迭代器获取Map.Entry的单元对象 3 获取key和value Map<String,JSONObject& ...

  9. aircrack-ng 多网卡启动后环境清理

    #!/bin/sh pkill airodump airmon-ng stop wlan0mon service network-manager restart rm -rf sadsad*

  10. 《Struts2.x权威指南》学习笔记1

    第2章 Struts的hello world 在介绍hello world项目前,文中要求下载和安装Struts2,主要是下载lib库和文档,可用于通过命令行进行代码编译.由于公司采用IntelliJ ...