新闻详情

新闻详情

首页 / 资讯中心 / 详情

初识C语言:函数的嵌套调用、链式访问以及递归与迭代

发布时间:2026/9/29 8:46:09来源:尧图网络
初识C语言:函数的嵌套调用、链式访问以及递归与迭代
1.函数的嵌套调用和链式访问(1)嵌套调用函数可以嵌套调用不可以嵌套定义void print() { printf(hehehehe\n); } void three_print() { int i 1; for(i 0;i 3;i) { print(); } } int main() { three_print(); return 0; }(2)链式访问将一个函数的返回值作为另一个函数的参数#include stdio.h #include string.h int main() { // 普通访问 int len strlen(abcdefg); printf(%d\n,len); // 链式访问将函数串起来 printf(%d\n,strlen(abcdefg)); }2.函数的声明与定义(1)函数的声明告诉编译器有一个函数叫什么参数是什么返回类型是什么。但具体存不存在函数声明决定不了函数声明一般出现在函数使用之前。即 满足先声明后使用函数声明一般放在头文件中(2)函数的定义是指函数的具体实现和功能#includestdio.h //函数的声明 int Add(int x,int y); // int Add(int,int) int is_in(int); int main() { int a 0; int b 0; scanf(%d %d,a,b); // 加法 int sum Add(a, b); printf(%d\n,sum); return 0; } // 函数的定义 int Add(int x,int y) { return xy; }假设 程序员A 写的一段程序 卖给 B公司3.函数的递归程序调用自身的编程技巧(1)递归的定义递归是一种常用的程序算法一个程序或函数在其定义或说明中 直接 或 间接 调用自身的一种方法通常把一个大型的复杂问题层层转化为一个与原问题相似的、规模较小的问题求解 —— 递归策略作用只需少量的代码就可以描述出接替过程中需要的多次重复计算大大减少了程序的代码量核心大事化小接受一个整型值无符号按照顺序打印它的每一位#include stdio.h void print(int n) { if(n 9) { print(n / 10); } printf(%u ,n % 10); } int main() { unsigned num 1234; printf(请输入整数); scanf(u,num); print(num); return 0; }(2)递归的两个必要条件存在限制条件当满足这个限制递归便不再继续每次递归之后越来越接近这个限制条件(3)练习——编写函数不允许创建临时变量时求字符串长度a.使用临时变量#includestdio.h //int my_strlen(char str[]) //参数部分写成数组形式 int my_strlen(char* str) //参数部分写成指针形式 { int count 0; // 临时变量 while(*str ! \0) { count; str; //找些一个字符指针 } } int main() { //int len my_strlen(abc); // 实参传给函数形参的时首字符的 地址相当于如下 char arr[] abc; // [a ,b, c, \0] int len my_strlen(arr); // 传给函数形参的是 一个字符的地址所以函数参数为 char* printf(%d,len); return 0; }b.不使用临时变量——递归求解#includestdio.h int my_strlen(char* str) { if(*str ! \0) { return 1 my_strlen(str1); //str : 前置先使用后 ———— 会导致死递归 str : 最终值一样但会导致 str的值变化 } else { return 0; } } int main() { //int len my_strlen(abc); // 实参传给函数形参的时首字符的 地址相当于如下 //char arr[] abc; int len my_strlen(arr); printf(%d,len); return 0; }4.递归与迭代(1)练习1——求n的阶乘a.递归实现int fac(int n) // 5! 5*4! { // 4 4*3 if(n1) // 3 3*2 return 1; // 2 2*1 else // 1! 1 此时 n1,递延完成 return n*fac(n-1); } int main() { int n 0; scanf(%d,n); int ret fac(n); printf(ret %d\n,ret); return 0; }b.迭代实现int fac(int n) { int i 0; int ret 1; for(i 1;i n; i) { ret ret * i; } return ret; } int main() { int n 0; scanf(%d,n); int ret fac(n); printf(ret %d\n,ret); return 0; }(2)练习2——求第n个斐波那契数(1 1 2 3 5 8 13 21 34 55......)a.递归实现int count 0; int Fib(int n) { if(n 5) { count ; } if(n 2) return 1; else return Fib(n-2) Fib(n-1); } int main() { int n 0; scanf(%d,n); int ret Fib(n); printf(%d\n, ret); printf(%d,count); return 0; }b.迭代实现int fib(int n) { //int a 1, b 1; //int c 1; //for(int i 1; i n-2; i) //{ // c a b; // a b; // b c; //} while(n 3) { c a b; a b; b c; n--; } return c; } int main() { int n 1; scanf(%d,n); int ret fib(n); printf(%d\n,ret); return 0; }5.总结许多题目可以使用都会进行解释这是因为 递归 比 非递归的显示更清晰但是这些问题的的迭代实现可能往往比递归实现效率更高虽然代码可读性稍微差一点当一个问题相当复杂无法使用迭代实习时此时使用递归实现的简洁性以补偿它所带来的允许时的开销6.函数递归经典问题(1)汉诺塔问题#includestdio.h void move(char f, char t) { printf(%c -- %c\n, f, t); } void fn_num(int n, char A, char B, char C) { if (n 1) move(A, C); else { fn_num(n - 1, A, C, B); move(A, C); fn_num(n - 1, B, A, C); } } int main() { int n 0; char a A, b B, c C; printf(请输入塔盘数); scanf(%d, n); fn_num(n, a, b, c); return 0; }(2)青蛙跳台问题#includestdio.h int fb(int n) { if (n 1) return 1; else if(n 2) return 2; else return fb(n-1)fb(n-2); /* if (n 1) return 1; else if(n 0) return 1; else return fb(n-1)fb(n-2); */ } int main() { int n 0; printf(一共有多少个台阶); scanf(%d,n); int sum fb(n); printf(%d,sum); return 0; }
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Ubuntu学习路线:安装、配置、开发环境与排错实战 2026/9/29 9:39:46

Ubuntu学习路线:安装、配置、开发环境与排错实战

1. 为什么值得花时间系统学一遍 Ubuntu很多人第一次接触 Ubuntu 都是从"装个虚拟机玩玩"开始的,然后在某个深夜被显卡驱动或者中文输入法按在地上摩擦,最后默默关掉虚拟机回到原来的系统。我自己也走过这条路,前后折腾过七八台机器…

阅读更多 →
电子政务云费用计算全指南:配额计费、账单复核与预算估算 2026/9/29 9:39:46

电子政务云费用计算全指南:配额计费、账单复核与预算估算

简介:面向政务信息化主管部门、云服务运维企业及采购评审人员的电子政务云平台服务费用测算参考文档,依据国家相关政策与多地取费经验,系统梳理平台建设、运行保障与服务使用等费用构成。全文围绕基础设施、支撑软件、信息安全、应用部署迁移…

阅读更多 →
Python的只读模式 `‘r‘` 看似简单,实则包含了文件指针、编码处理、内存管理等丰富的计算机基础知识 2026/9/29 9:39:39

Python的只读模式 `‘r‘` 看似简单,实则包含了文件指针、编码处理、内存管理等丰富的计算机基础知识

在Python编程的基础体系与计算机等级考试的考点中,文件操作是连接程序与外部数据的核心桥梁。无论是处理日志文件、读取配置参数,还是进行数据分析,掌握文件读写都是必备技能。而在所有文件操作模式中,只读模式(‘r’&…

阅读更多 →
superpowers工作流:让Codex CLI成为Java项目的交付流水线 2026/9/29 9:39:39

superpowers工作流:让Codex CLI成为Java项目的交付流水线

去年年底我把日常编码节奏从“IDE 为主、AI 为辅”调转成“AI 为主、IDE 兜底”之后,真正触发这个转变的,就是一套叫 superpowers 的工作流方案。它不是某个框架,也不是一门新语言,而是一组围绕 AI 编程助手(以 OpenAI…

阅读更多 →
操作系统全貌解析:从进程线程到国产系统,一文捋清核心概念 2026/9/29 9:39:39

操作系统全貌解析:从进程线程到国产系统,一文捋清核心概念

前两天一个刚转行做运维的朋友问我:学了这么久的操作系统概念,什么进程、线程、管程、协程,还有国产Linux那一堆发行版,到底串起来是个什么关系?我说你这个问题问得特别大,大到一本《操作系统概念》第10版都…

阅读更多 →
SDF反标在数模混合仿真中的正确姿势:Cadence环境踩坑全记录 2026/9/29 9:39:39

SDF反标在数模混合仿真中的正确姿势:Cadence环境踩坑全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉