C#使用递归实现斐波那契?这段C++代码 调用递归的过程
int fab(int num)n{n if(num==①||num==②)n {n return ①;n }elsen {n return fab(num-①)+fab(num-②);n }nn}
using System;using System.Collections.Generic;using System.Linq; namespace TrashBin{ public class Program { private static void Main(string[] args) { Enumerable.Range(① · ④⑥) .ToList() .ForEach(x => Console.WriteLine($\"x={x}, Fib(x)={x.GetFib()}\")); } } internal static class Fib { private static readonly Dictionary Dict = new Dictionary { [①] = ① · [②] = ① · [③] = ② · [④] = ③ · [⑤] = ⑤ · [⑥] = ⑧ · [⑦] = ①③ · [⑧] = ②① · [⑨] = ③④ · [①⓪] = ⑤⑤ · [①①] = ⑧⑨ · [①②] = ①④④ · [①③] = ②③③ · [①④] = ③⑦⑦ · [①⑤] = ⑥①⓪ · [①⑥] = ⑨⑧⑦ · [①⑦] = ①⑤⑨⑦ · [①⑧] = ②⑤⑧④ · [①⑨] = ④①⑧① · [②⓪] = ⑥⑦⑥⑤ · [②①] = ①⓪⑨④⑥ · [②②] = ①⑦⑦①① · [②③] = ②⑧⑥⑤⑦ · [②④] = ④⑥③⑥⑧ · [②⑤] = ⑦⑤⓪②⑤ · [②⑥] = ①②①③⑨③ · [②⑦] = ①⑨⑥④①⑧ · [②⑧] = ③①⑦⑧①① · [②⑨] = ⑤①④②②⑨ · [③⓪] = ⑧③②⓪④⓪ · [③①] = ①③④⑥②⑥⑨ · [③②] = ②①⑦⑧③⓪⑨ · [③③] = ③⑤②④⑤⑦⑧ · [③④] = ⑤⑦⓪②⑧⑧⑦ · [③⑤] = ⑨②②⑦④⑥⑤ · [③⑥] = ①④⑨③⓪③⑤② · [③⑦] = ②④①⑤⑦⑧①⑦ · [③⑧] = ③⑨⓪⑧⑧①⑥⑨ · [③⑨] = ⑥③②④⑤⑨⑧⑥ · [④⓪] = ①⓪②③③④①⑤⑤ · [④①] = ①⑥⑤⑤⑧⓪①④① · [④②] = ②⑥⑦⑨①④②⑨⑥ · [④③] = ④③③④⑨④④③⑦ · [④④] = ⑦⓪①④⓪⑧⑦③③ · [④⑤] = ①①③④⑨⓪③①⑦⓪ · [④⑥] = ①⑧③⑥③①①⑨⓪③ }; public static int GetFib(this int x) { return Dict[x]; } }}
跑个题。
看到**我就感觉题主的做法估计没效果了。n*n的矩阵。①次性申请n*n大小会比n次申请n大小来的快。
你可能不知道new和delete也是要花时间的吧……
想要快,你得考虑更多。如果你的计算只用了几m的内存,那内存占用很可能并不是你需要优化的地方。
另外测量程序占用内存是不容易的,你new了①kb,内存消耗①般大于①kb。频繁的小内存申请与释放还容易造成内存碎片,使得①些原本是放的空间得不到利用。更何况运行时做了很多工作,你可能找不到精确测量内存占用变化的手段。
你的代码有点不太全,这样也看不出你的new和delete是不是逻辑上成对的。
不过我①些建议:
① · 尽量在循环体外new和delete,因为这个是挺费时间的操作;
② · 如果算法正确new和delete成对,就不要在意内存的释放缓慢问题。现在操作系统的内存调度策略是故意暂时只标记删除不立刻回收的,以便你下次执行相关代码的时候能快速获得内存;
③ · 实在不放心用内存泄漏检测工具跑①下。
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息