标签:code 递归函数 一个栈 tag 函数 地址 数通 fun src
longFactorial(longn){ if(n==0) return1; elsereturnn*Factorial(n-1); }
LinkNode *FindRear(LinkNode *f){ if(f==NULL) returnNULL; elseif(f->link==NULL) returnf; elsereturnFindRear(f->link); }
voidSearch(LinkNode *f,T& x){ if(f==NULL) return; elseif(f->data==x) returnf; elsereturnSearch(f->link,x); }
struct Node{ //栈结点的类定义 longn; //记忆走过的n inttag; //区分左右递归的标志 } longFibnacci(longn){ Stack<Node> S ; Node *w; longsum=0; do{ while(n>1){ w->n=n; w->tag=1; S.push(w); n--; } sum=sum+n; while(!S.IsEmpty()){ S.Pop(w); if(w->tag==1){ //tag==1表示向左递归 w->tag=2; //tag==2表示向右递归 S.push(w); n=w->n-2; break; } } }while(!S.IsEmpty()); }
longFibIter(longn){ if(n<=1) returnn; longtwoback=0,oneback=1,Current; for(i=2;i<=n;i++){ Current=twoback+oneback; //计算Fib(i-2)+Fib(i-1)的值 twoback=oneback; //把Fib(i-1)的值保存作为下一次的Fib(i-2) oneback=Current; //把Fib(i)的值保存作为下一次的Fib(i-1) } returnCurrent; }
voidrecfunc(intA[],intn){ if(n>=0){ cout<<A[n]<<","; n--; recfunc(A,n); } }
voiditerfunc(intA[],intn){ while(n>=0){ count<<A[n]<<","; n--; } }
标签:code 递归函数 一个栈 tag 函数 地址 数通 fun src
原文地址:https://www.cnblogs.com/yangyuliufeng/p/9211412.html