首页 > 其他分享 >函数递归输出1~100的数字及递归的栈溢出问题

函数递归输出1~100的数字及递归的栈溢出问题

时间:2024-06-03 21:58:04浏览次数:30  
标签:%- 函数 递归 int digital 5d 100 溢出

什么是递归?

  • 递归就是函数⾃⼰调⽤⾃⼰
  • 递归中的递就是递推的意思,归就是回归的意思
  • 如果递归就像循环一样,打一个大的复杂问题转化一个小的问题,但是要与原问题相似,分解成规模较⼩的⼦问题来求解;直到⼦问题不能再被拆分,递归就结束了,所以递归的思考⽅式就是把⼤事化⼩的过程

递归有哪些限制条件?

  • 当满⾜这个限制条件的时候,递归便不再继续
  • 每次递归调⽤要越来越接近这个限制条件

图画图分析:


我们假设要打印1~3的数字,为了更好地理解我们假设有三个函数函数A、函数B、函数C,,还有一个最后返回的函数(主函数)

在这里插入图片描述
在递归回归的过程中就把数字打印了


代码实现:

int digital(int n)
{
	if (n > 1)
	{
		digital(n - 1);  //递归的限制条件

	}
	printf("%-5d", n);
	
}
	
int main()
{
	int c = 0;
	digital(10);
	return  0;
}

出现栈溢出的情况:

错误的代码示例:

int digital(int n)
{
	if (n > 1)
	{
		digital(n - 1);

	}
	printf("%-5d", n);
	
}
	
int main()
{
	int c = 0;
	digital(10000);
	return  0;
}

报错:
在这里插入图片描述
Stack overflow 的意思就是栈溢出的意思
解释:

在每⼀次函数调⽤,都需要为本次函数调⽤在内存的栈区,申请⼀块内存空间来保存函数调⽤期间的各种局部变量的值

当递归递推的很深,都要每一次调用函数为内存申请一块内存空间,越来越多就回益处,所以如果要完成一个任务比较复杂,会浪费很多很多的内存空间的会就不要用递归来解决了,另一种方法就是迭代(就是循环的方法解决问题)
比如:我们打印1~100的数值

#include<stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 100; i++)
	{
		printf("%-5d", i);
	}
	return 0;
}

总结:

迭代的方式是比递归的效率高很多,递归有时候使用不当,就会导致一些问题,不好维护,也不要什么要的代码就想着使用递归,适可⽽⽌就好了

标签:%-,函数,递归,int,digital,5d,100,溢出
From: https://blog.csdn.net/2301_81711797/article/details/139373998

相关文章

  • Python从0到100(三十):requests模块的其他方法
    1requests中cookirJar的处理方法使用request获取的resposne对象,具有cookies属性,能够获取对方服务器设置在本地的cookie,但是如何使用这些cookie呢?1.1方法介绍response.cookies是CookieJar类型使用requests.utils.dict_from_cookiejar,能够实现把cookiejar对象转化为字典......
  • 反转链表(递归和迭代两种实现)
    1#defineIOstd::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)2#definebug(x)cout<<#x<<"is"<<x<<endl;3#include<bits/stdc++.h>4usingnamespacestd;5typedeflonglongll;6structNode{7intx......
  • BUUCTF-Misc(91-100)
    [MRCTF2020]CyberPunk运行一下,他说2020.9.17才开始然后改一下系统时间就拿到flagflag{We1cOm3_70_cyber_security}[安洵杯2019]Attack参考:[BUUMISC刷题记录安洵杯2019]Attack-云千-博客园(cnblogs.com)找到了一个formost分离一下,在压缩包找到了然后在导出......
  • 莘默货期-短行动快-ABB-JOKAB 开关 2TLA020001R1000
    莘默(上海)自动化设备有限公司曹工150.0057.5786————————————————————————ABB-JOKAB标识符2TLA020070R2600ABB-JOKAB安全开关2TLA019995R4800ABB-JOKAB 开关 2TLA020001R1000ABB-JOKAB安全开关2TLA050056R2120ABB-JOKAB安全控制装置2......
  • F1000 Research 准备研究文章
    准备研究文章  LINK  本页提供有关为F1000Research撰写研究文章的信息,包括文章中必须包含的关键部分。另请参阅F1000Research的编辑政策。此处提供了研究文章的模板。标准研究文章应呈现发现和见解的独创性,并为各自的研究领域提供理论、实证、实验和/或方法论的进步。还......
  • 100311. 无需开会的工作日
    题目描述给你一个正整数days,表示员工可工作的总天数(从第1天开始)。另给你一个二维数组meetings,长度为n,其中meetings[i]=[start_i,end_i]表示第i次会议的开始和结束天数(包含首尾)。返回员工可工作且没有安排会议的天数。注意:会议时间可能会有重叠。情况描述6月2日周......
  • 英伟达赢麻了!马斯克xAI超级算力工厂曝光,10万块H100、数十亿美元
        ChatGPT狂飙160天,世界已经不是之前的样子。新建了免费的人工智能中文站https://ai.weoknow.com新建了收费的人工智能中文站https://ai.hzytsoft.cn/更多资源欢迎关注英伟达:尽管建,用的还是我的芯片,最近几年,随着大语言模型的飞速发展与迭代,科技巨头们都竞相投入......
  • 猜数字游戏(1-100)
    voidmenu(){ printf("------猜数字------\n"); printf("******************\n"); printf("*****1.play*****\n"); printf("*****0.exid*****\n"); printf("******************\n"); printf("----------......
  • Day 10:100322. 删除星号以后字典序最小的字符串
    Leetcode100322.删除星号以后字典序最小的字符串给你一个字符串s。它可能包含任意数量的‘’字符。你的任务是删除所有的'’字符。当字符串还存在至少一个‘*’字符时,你可以执行以下操作:删除最左边的‘*’字符,同时删除该星号字符左边一个字典序最小的字符......
  • 利用AutoUnattend自动应答文件安装Windows Server 2025 26100正式版
    安装视频:https://www.bilibili.com/video/BV1ji421v7jZ/AutoUnattend自动应答文件,安装到第一个硬盘(容量大于100G),安装后登录用户Administrator的密码:pass1234AutoUnattend自动应答文件已经上传到:https://bbs.pcbeta.com/viewthread-2004613-1-1.html ......