Algorithm_01--C#递归算法01
///递归算法本质:
///1、方法的自我调用
///2、有明确的终止条件
///3、每次调用时,问题规模在不断减少。通过递减,最终到达终止条件
问题:程序在输入1000后(即1到1000的和),程序会出现异常。
解答:百度后得出结论,栈溢出异常。
1、递归方法在每次调用自身时,都会生成一个新的栈帧并压入调用栈。
2、对于计算1到100的和,递归深度是100层,这还在大多数的编程语言栈的大小范围内。
3、对于1到1000的和,递归深度为1000层,这通常会超过编程语言栈的大小限制,从而导致栈溢出。
4、C#中默认栈大小是1MB,可以通过修改配置文件app.config来增大,但是也会带来内存占用过高的问题。
5、所以递归深度过大时,应该避免使用递归方法,而使用迭代算法,对于这个问题可以使用for循环迭代计算。
延申:
大多数编程语言的默认栈大小都在1MB以上,可以支持1000层以内的递归调用。像C#的默认栈是1MB,Java是512KB,Python是10MB等。当递归深度在1000层以内时,占用的栈空间还在可控范围内,不会导致内存占用过高的问题。3. 对于简单的算法逻辑,递归深度1000层以内的递归代码还比较清晰简洁,易于理解。如果使用迭代重写,代码的可读性会差一些。
总结:大概递归深度过大的,就不要考虑使用递归来计算了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!