当前位置: 首页 > backend >正文

C语言-函数的递归和迭代

以下是我初学C语言的笔记记录,欢迎在评论区补充留言

 一,函数的递归

大致有这么几个问题【我看完这堂课后,自己总结的几个问题】

* 问题

1,什么是函数的递归, 2,它是干什么用的,3,有什么条件吗,4,它与循环又有什么区别

* 回答

1,2:

是一个将重复性的问题,或是一个大的问题,给它精进成较小的问题,用较少的代码去解决;核心就是大事化小,有点像倒过来的金字塔,不断向下深究,从大到小慢慢解决

3:

有两个必要条件:第一,存在一个限定条件,当满足这个限定条件后,不再进行递归;第二,每次递归后越来越接近这个限定条件;

必须在编写函数的递归时候,要有这两个条件,有这两个递归条件不能保证不会死递归,但是没有他两,一定会死递归

4:

递归,你一再又再地跌入深谷【递】,直到跌到谷底【必要的条件】,你开始慢慢的向上攀爬回来【归】;循环,像是汽车在环形车道里绕圈,直到看到出口才会出去;前者是不断地往下递,在达到一个条件后,慢慢的归,后者是重复一个动作,直到满足一个条件后才停止这个动作

//函数的递归
//在不使用临时变量,计算字符串的大小
#include<stdio.h>int my_strlen(char* str)
{if (*str != '\0') //必要的条件{return 1 + my_strlen(str + 1); //用到了函数的递归}elsereturn 0;
}
int main()
{char str[] = "abcd";printf("%d", my_strlen(str)); //计算出str的大小return 0;
}

思路:

首先,main函数中,调用了函数my_strlen(),并且传入实参 str 给到形参,由于数组传参是传递首个字符的地址,所以形参是一个指针变量

其次,根据,在my _strlen()函数中,根据形参给的地址,进行一个解引用操作,来进行判断是否为 '\0'(字符串的结束标志)的条件

困惑:为什么要用到 return 1 + my_strlen(str +1);

原因:由于第一个元素是a,所以字符串的大小至少是从 1 开始的,接着再用 str + 1,将现在的指针变量转向 b 的地址,再次进入这个函数,以此类推,到 \0 时候,发现 if 的条件不满足,进入到 else 中,返回 0 ,自此,“递”的动作做完,开始“归”,将刚刚没有执行完的返回值语句,一个个执行

二,函数的迭代

迭代包含循环,循环是一种特殊的迭代

【琐碎记录】

* %d 是打印有符号的整数,有正负数

* %u对应无符号,无负号

*  内存三个部分,栈区,堆区,静态区

* 函数的形参,局部变量,函数的调用都在栈区

* 死递归,栈溢出 

http://www.xdnf.cn/news/3410.html

相关文章:

  • Spring Boot 使用 WebMagic 爬虫框架入门
  • 腾讯云BI VS quickbi 企业选型(从企业实际功能使用和费用对比)
  • 在项目中如何对Map List等对象序列化及反序列化
  • 雅马哈SMT贴片机高效精密制造解析
  • 【数据结构】线性表--顺序表
  • 59常用控件_QComboBox的使用
  • 【C语言练习】015. 声明和初始化指针
  • 【Hive入门】Hive性能调优之资源配置:深入解析执行引擎参数调优
  • 欧拉计划 Project Euler62(立方数重排)题解
  • Allegro23.1新功能之如何加粗打印线宽操作指导
  • 跨域 iframe 内剪切板 Clipboard_API 报错
  • 网络安全零基础培训 L1-9 PHP连接MySQL数据库
  • d202551
  • QMK固件烧录指南:安全高效地更新您的机械键盘
  • Python结合QT进行开发
  • 西门子数字化研发设计制造一体化规划案例P87(87页PPT)(文末有下载方式)
  • 神经网络—损失函数
  • Python 数据智能实战 (6):用户评论深度挖掘
  • OpenGL-ES 学习(10) ---- OpenGL-ES Shader语言语法
  • CMake中强制启用option定义变量的方法
  • Unity SpriteEditor(精灵图片编辑器)
  • C++笔记-继承(下)(包含派生类的默认成员函数,菱形继承等)
  • AJAX 实例
  • vscode 的空格和 tab 设置 与 Rime 自建词库
  • AI大模型基础设施:主流的几款开源AI大语言模型的本地部署成本
  • 企业内训|智能驾驶与智能座舱技术——某汽车厂商
  • Ubuntu18 登录界面死循环 Ubuntu进不了桌面
  • 初学Vue之记事本案例
  • 【Linux】VSCode用法
  • 【嵌入式———通用定时器基本操作——实验需求2:案列:测量PWM的频率/周期】