算法:阶乘的五种算法

您所在的位置:网站首页 阶乘简易算法 算法:阶乘的五种算法

算法:阶乘的五种算法

2024-07-11 06:39| 来源: 网络整理| 查看: 265

背景

周末温习了一下递归相关的一些概念,本文先给出阶乘的五种算法。

第一种实现:递归 1 private static long RecursiveFac(long n) 2 { 3 if (n == 0) 4 { 5 return 1; 6 } 7 else 8 { 9 return n * RecursiveFac(n - 1); 10 } 11 } 第二种实现:递推 1 private static long Fac(long n) 2 { 3 var result = 1; 4 5 for (var i = 1; i 0) 28 { 29 var current = stack.Peek(); 30 31 switch (current.CodeAddress) 32 { 33 case CodeAddress.Start: 34 if (current.N == 0) 35 { 36 result = 1; 37 stack.Pop(); 38 } 39 else 40 { 41 current.CodeAddress = CodeAddress.AfterFirstRecursiveCall; 42 stack.Push(new StackFrame 43 { 44 N = current.N - 1, 45 CodeAddress = CodeAddress.Start 46 }); 47 } 48 break; 49 case CodeAddress.AfterFirstRecursiveCall: 50 current.FirstRecursiveCallResult = result; 51 52 result = current.N * current.FirstRecursiveCallResult; 53 stack.Pop(); 54 break; 55 } 56 } 57 58 return result; 59 } 备注

这里比较有意思的实现是:尾递归和基于堆中的栈的递归,本文先不详细介绍了,后面再细说,有兴趣的朋友先看如下资源:

Replacing Recursion With a Stack。How to replace recursive functions using stack and while-loop to avoid the stack-overflow。HOW TO CONVERT A RECURSIVE ALGORITHM TO A NON-RECURSIVE ONE。Replace Recursion with Iteration。Provide an explanation of recursion, including an example。Tail Recursion。Understanding Tail Recursion。

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3