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

Day_01--C#递归算法

时间:2023-05-23 15:35:33浏览次数:44  
标签:01 递归 -- 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,递归,--,C#,算法,调用,深度,1000
From: https://www.cnblogs.com/tu1355140301/p/17425335.html

相关文章

  • 新一代企业数字化联盟成立,甄知科技与众多企业“强强联手”搭建品牌服务生态
    5月18日,新一代企业数字化联盟(以下简称“新一代联盟”)成立大会在上海举行。该联盟由包括甄云科技、得帆信息、甄知科技、盖雅工场、甄零科技、易立德信息、鼎医、数划云在内的8家创新型数字化软件科技企业发起,旨在希望通过强强联合,实现国产品牌推广、解决方案价值的最大化,助力上海......
  • 发送邮件报错dh key too small
    ssl.SSLError:[SSL:DH_KEY_TOO_SMALL]dhkeytoosmall(_ssl.c:1129)1、找到openssl.cnf的配置文件,如/etc/ssl/openssl.cnf2、在配置文件中找到crypto_policy指向的文件 3、修改指向的文件的内容:/etc/crypto-policies/back-ends/opensslcnf.config 4、我还重启了容......
  • 实验四
    任务一实验代码1print(sum)2sum=423print(sum)45definc(n):6sum=n+17print(sum)8returnsum91011sum=inc(7)+inc(7)12print(sum)task运行结果截图不是同一个对象名称 1.Built-in。2和3Global。4.Local任务二......
  • The server encountered an internal error that prevented it from fulfilling this
    org.apache.ibatis.exceptions.PersistenceException:###Errorqueryingdatabase.Cause:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Couldnotcreateconnectiontodatabaseserver.###Theerrormayexistincom/itheima/mapper/Br......
  • 在终端运行查询clickhouse的方式
    执行的语法和命令如下:timeclickhouse-client-hlocalhost-udefault--password"root"--port9000-dtpch-q"selectcount(*)fromcustomer;"打印的结果显示如下:root@test-stonedata-ck02:~#timeclickhouse-client-hlocalhost-udefault--password&q......
  • AtCoder Regular Contest 139 C One Three Nine
    洛谷传送门AtCoder传送门闲话:做这场的B用时跟C差不多不会直接构造,因此这是一个无脑做法。考虑对于\(\forallx\in[1,n],y\in[1,m],(x+3y,3x+y)\)看成一个点,那么选择的\((x,y)\)要满足,不存在一行或一列有超过\(1\)个点。这启发我们对于合法的点\((a......
  • flutter 使用Get.toName跳转到新页面,返回刷新列表页面
    flutter使用Get.toName跳转到新页面,在新页面执行操作,比如说删除某个对象,需要返回页面刷新列表页面1.Get.toNamed(routes)!.then((value)=>refresh);其中的refresh是执行刷新后的方法2.Get.back(result:'backtorefresh');......
  • BAT 文件后缀操作
    单个文件夹的文件ren*.jpg1*.jpg将所有.jpg1后缀改成.jpg二、所有目录下文件夹的文件@echooffsetnum=0For/r.%%iin(*.jpg1)do(set/anum+=1echo%%icallecho第%%num%%个文件处理成功ren%%i*.jpg)echo共%num%个文件被处理成功pause>nul......
  • 浅谈TCP协议的发生过程
    1.TCP协议1.1TCP协议的性质面向连接的、可靠的、基于字节流至于为什么面向连接,又为什么可靠,基于字节流的,等后面便可知道.1.2TCP协议栈收发数据的四个阶段创建套接字连接服务器收发数据断开服务器连接,删除套接字1.3TCP头部格式2.创建套接字2.1首先理解......
  • java.sql.SQLException: Access denied for user 'root'@'localhost' (using password
    org.apache.ibatis.exceptions.PersistenceException:###Errorqueryingdatabase.Cause:java.sql.SQLException:Accessdeniedforuser'root'@'localhost'(usingpassword:YES)###Theerrormayexistincom/itheima/mapper/BrandMapper.j......