递归转非递归(学习笔记)

在网上逛的时候发现一篇好文 递归转非递归 ,阅读完,觉得有启发,把重点记录下来,另外作者是用ISO C++语言描述的,我在测试的时候把它改成C#2.0的拉:

为什么要递归转非递归:
因为每一次的递归调用都需要压栈占用内存,效率不高.

递归转非递归的两种方法:
下面以求n的阶乘来说明
先给出一般的递归方法:

递归求阶乘

非递归方法一:循环法,前提是,待解决问题必须能够分解出可循环规律方可
而n! = n! = n*(n-1)*(n-2)*....*1;从循环的角度理解就是:n!表示执行n次循环计算一个增量k,初始k=1和结果t=1;每次t乘以k++的值.从而可以得到:
循环求阶乘

非递归方法二:自定义堆栈法,目的是为不能分析出来循环的递归操作提供开销可控的方法.如:
自定义堆栈求阶乘

说明:以上代码在Visual Studio 2005 Express中测试通过.
posted @   kwklover  阅读(7109)  评论(6编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示