fib函数递归实现:
long Fib(long n) { if (n <= 1) { return n; } else { var t1 = Fib(n - 1); var t2 = Fib(n - 2); return t1+ t2; } }
fib函数改为迭代:
class Class1 { class Node { public Node(long n, int pos) { this.n = n; this.retStatus = pos; } public long n; //参数 public int retStatus; //0,表示temp中没有保存值 //1, 表示temp中保存了栈顶记录的t1值。 //2,表示temp中保存了栈顶记录的t2值。 public long ret; //返回值 public long t1; //存第一次调用Fib的返回值 public long t2; //存第二次调用Fib的返回值 } long Fib(int n) { long temp = 0; var s = new Stack<Node>(); s.Push(new Node(n, 0)); while (s.Count > 0) { Node top = s.Peek(); switch (top.retStatus) { case 0: if (n <= 1) { top.ret = n; temp = top.ret; s.Pop(); } else { top.retStatus = 1; s.Push(new Node(n - 1, 0)); } break; case 1: top.t1 = temp; top.retStatus = 2; s.Push(new Node(n - 2, 0)); break; case 2: top.t2 = temp; top.ret = top.t1 + top.t2; temp = top.ret; s.Pop(); break; } } return temp; } }
来源:https://www.cnblogs.com/cuishengli/archive/2012/03/02/2377714.html