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

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对应无符号,无负号

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

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

* 死递归,栈溢出 

相关文章:

  • 【大模型】图像生成:ESRGAN:增强型超分辨率生成对抗网络的革命性突破
  • 在 Windows 上启用 Telnet 命令
  • Linux之shell脚本
  • 多商户商城系统开发全策略:从技术架构到流量增长
  • 前端八股 3
  • 2025智能体的发展趋势
  • 分寝室(C++完成)
  • [UVM]寄存器模型的镜像值和期望值定义是什么?他们会保持一致吗?
  • Socket通信
  • SQL注入与简单实战
  • 动态规划简单题
  • Origin绘图操作:图中迷你图绘制
  • 欧拉计划 Project Euler62(立方数重排)题解
  • GESP2024年6月认证C++八级( 第一部分选择题(11-15))
  • 图像增强技术:从基础原理到企业级开发实战
  • NU1680低成本、无固件、高集成度无线充电电源接收器
  • 如何阅读GitHub上的深度学习项目
  • 【人工智能】图神经网络(GNN)的推理方法
  • 本地部署 n8n 中文版
  • 从 Python 基础到 Django 实战 —— 数据类型驱动的 Web 开发之旅
  • 中国队夺跳水世界杯总决赛首金
  • 魔都眼|西岸国际咖啡生活节:连接艺术、音乐与宠物
  • 美国经济萎缩意味着什么?关税政策如何反噬经济?
  • 车展之战:国产狂飙、外资反扑、智驾变辅助
  • 上海国际咖啡文化节开幕,北外滩集结了超350个展位
  • 屠呦呦当选美国科学院外籍院士