首页 > 编程语言 >Algorithm_01--C#递归算法

Algorithm_01--C#递归算法

时间:2023-05-23 16:33:07浏览次数:34  
标签:01 Algorithm 递归 -- C# 算法 调用 深度 1000

///递归算法本质:
///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层以内的递归代码还比较清晰简洁,易于理解。如果使用迭代重写,代码的可读性会差一些。

总结:大概递归深度过大的,就不要考虑使用递归来计算了。

标签:01,Algorithm,递归,--,C#,算法,调用,深度,1000
From: https://www.cnblogs.com/tu1355140301/p/17425618.html

相关文章

  • C++ 模板 使用 enum 代替 typename
    enumtestEnum{A,B,C};template<testEnumC>classTestClassTemplate{public:voidprint(){printf("common\n");}};template<>classTestClassTemplate<A>{public:voidprint(){printf(&quo......
  • spdy_header
    spdy_header:一个工具类,代表着httpheader的数据结构。<1>因为httpheader本身的key-value特性,因此使用了hashMap来保存httpheader,key是header的名称,而value是header的内容。对于碰撞,则采用了拉链法来解决,hashMap的bucket的尺寸由HTABLE_SIZE来编译期......
  • TEMP_FAILURE_RETRY 宏
    TheGNUlibraryprovidesaconvenientwaytoretryacallafteratemporaryfailure,withthemacroTEMP_FAILURE_RETRY:—Macro:TEMP_FAILURE_RETRY (expression)Thismacroevaluatesexpressiononce,andexaminesitsvalueastypelongint.Ifthevaluee......
  • poj-1519
    //132K0MSC++#include<cstdio>#include<cstring>usingnamespacestd;longlonggetDigitSum(longlongval){longlongdigitSum=0;if(val<10){returnval;}else{while(val){digitSum+=......
  • spdy_zlib
    spdy_zlib:工具类,用于对数据进行deflate/gzip压缩,本身是对zlib库的定制化包装:<1>采用了头文件定义接口,实际实现类则通过继承此接口类在cc文件中定义,对外封闭。通过gz*get_context()获得可用的GZ对象(实际是实现类gzContextImpl的对象)<2>3个操......
  • spdy_buffer
    spdy_binary_buffer:工具类,作用就是一个可以自动扩容和内存空间回收的buffer(主要用来保存http和spdy传输的内容),单位为字节(类型为unsignedchar,因为字符集的值都是>=0的)<1>几个关键的属性:(1)unsignedchar*buffer:指向保存内容的那部分内存的开......
  • 浅析EasyCVR视频能力在自然灾害风险预警场景中的应用意义
    一、方案背景我国是自然灾害多发的国家,夏季也是灾害多发季节,山洪、泥石流、洪涝、冰雹、飓风、地震等自然灾害每年都给国家经济带来巨大的损失。建设自然灾害风险预警视频监控系统,实现对自然灾害的可视化预警监测和监管,并提供数据分析、设备管理、智能分析、实时告警等功能,辅助和提......
  • Electron 上下文隔离和 node 集成
    ContextisolationandNodeintegrationScenario contextIsolation nodeIntegration RemarksA false false Preloadisnotneeded.Node.jsisavailableintheMainbutnotintheRenderer.B false true Preloadisnotneeded.Node.jsisavailableintheMaina......
  • laradock的基础使用
    一、安装laradock1.如果有laravel项目并使用git,可以用gitsubmodule将laradock克隆到laravel根目录,方便后续管理gitsubmoduleaddhttps://github.com/laradock/laradock.git2.如果不需要安装到gitsubmodule中,可以安装到任意位置gitclonehttps://github.com/laradock/la......
  • 轮询、长轮询、websocket
    轮询、长轮询、websocket一、轮询在一些需要进行实时查询的场景下应用比如投票系统:大家一起在一个页面上投票在不刷新页面的情况下,实时查看投票结果1、后端代码fromflaskimportFlask,render_template,request,jsonifyapp=Flask(__name__)USERS={......