函数嵌套和递归调用
时间:2020-01-12
本文章向大家介绍函数嵌套和递归调用,主要包括函数嵌套和递归调用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
C语言函数调用形式有两种:嵌套调用、递归调用。
C语言函数嵌套调用:
在调用一个函数的过程中,又调用另一个函数,称为函数嵌
套调用,C语言允许函数多层嵌套调用,只要在函数调用前
有函数声明即可。
1 #include <stdio.h> 2 int fa(int a,int b); //fa函数原型 3 int fb(int x); //fb函数原型 4 int main(){ 5 int a=5,b=10,c; 6 c=fa(a,b); 7 printf("%d\n",c); 8 c=fb(a+b); 9 printf("%d\n",c); 10 return 0; 11 } 12 13 int fa(int a,int b){ 14 int z; 15 z=fb(a*b); 16 return z; 17 } 18 19 int fb(int x){ 20 int a=15,b=20,c; 21 c=a+b+x; 22 return c; 23 }
C语言函数递归调用:
函数直接或间接调用自己称为递归调用。C语言允许函数递
归调用,如图(a) 所示为直接递归调用,如图(b)所示为间接递归调用。
注意事项:
1.在函数递归调用时,递归函数每次调用其本身,
一个新的函数栈就会被使用,这个新函数栈里的形参、
变量和该函数的另-个函数栈里面的形参、变量是完全不同
的内存单元。
2.递归函数必须定义一个终止条件,否则函数会永远递归下去,
直到栈空间耗尽。所以,递归函数内一般都用类似f语句来判定终止条件,
如果条件成立则继续递归调用,否则函数结束递归开始返回。
递归基本思想:
找出递归子结构性质(原问题的解包含了子问题的解)、用
子问题的解来递归定义原问题的解、找出递归终止条件。
递归算法设计的关键在于:找出递归关系式和递归终止条件。
递归关系就是使问题向边界条件转化的过程,所以递归关系
必须能使问题越来越简单,规模越来越小。
因此递归算法设计,通常有以下三个步骤:
1.分析问题,得出递归关系式。
2.设置边界条件,控制递归。
3.设计函数,确定参数。
1 #include<stdio.h> 2 int Hanio(int n,char A,char B,char C){ 3 //只有一个盘子直接A->C 4 if(n==1) printf("%c->%c",A,C); 5 else{ 6 //上面n-1块盘子A->B 7 Hanio(n-1,A,C,B); 8 //第n块盘子直接A->C 9 printf("%c->%c",A,C); 10 //B塔n-1块盘子B->C 11 Hanio(n-1,B,C,A); 12 } 13 } 14 15 int main(){ 16 int n; 17 printf("input n:"); 18 scanf("%d",&n); 19 Hanio(n,'A','B','C'); 20 return 0; 21 }
原文地址:https://www.cnblogs.com/ZengBlogs/p/12183301.html
- 用 Python 实现一个大数据搜索引擎
- 关于 Java 你不知道的 10 件事
- 如何在一周之内获得GitHub stars 3500+ —为什么对于程序员这是如此的重要
- 程序员做完整性检查的命令行工具
- Spring MVC工作原理
- PHP 中被忽略的性能优化利器:生成器
- 精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解
- 从放弃迅雷到自己开发下载工具
- SSH 登录流程分析
- 从 0 到 1 优雅的实现PHP多进程管理
- 爬虫抓取的门道——来看这篇
- Java编程常见问题汇总(一)
- 关于 Java 你不知道的 10 件事
- PHP 实时生成并下载超大数据量的 EXCEL 文件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python按顺序重命名文件并分类转移到各个文件夹中的实现代码
- Python实现删除某列中含有空值的行的示例代码
- python打开音乐文件的实例方法
- PHP基础之输出缓冲区基本概念、原理分析
- 基于python实现删除指定文件类型
- sync-player:使用websocket实现异地同步播放视频
- CentOS7.0下安装PHP5.6.30服务的教程详解
- PHP实现微信提现功能
- PHP实现SMTP邮件的发送实例
- php实现有序数组旋转后寻找最小值办法
- PHP APP微信提现接口代码
- ThinkPHP5 的简单搭建和使用详解
- php中怎么执行linux命令详解
- phpMyAdmin通过密码漏洞留后门文件
- php 调用百度sms来发送短信的实现示例