递归与非递归转换(栈知识应用)
生活随笔
收集整理的這篇文章主要介紹了
递归与非递归转换(栈知识应用)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
下面例題是一次作業中遇到的,很值得體味,與大家共享下。
?遞歸代碼:
1 long f(long m,long n) 2 { 3 long sum; 4 if(m==0) sum=n+1; 5 else if(n==0) sum=f(m-1,1); 6 else k=f(m-1,f(m,n-1)); 7 return sum; 8 }
?
?用遞歸來做很明了,當我們明白了遞歸所走的整個流程后,下面我們用棧來實現非遞歸的轉換。
?非遞歸代碼:
?
long f(long m,long n) {listStack<long> k; //用鏈棧來實現 k.push(m);k.push(n);long sum;while(k.length()!=1) //棧中只有一個元素時退出循環 {n=k.pop(); //出棧 m=k.pop();if(m==0) k.push(n+1);else if(n==0){k.push(m-1);n=1;k.push(n);}else{k.push(m-1);k.push(m);k.push(n-1);}}sum=k.pop(); return sum; }
轉載于:https://www.cnblogs.com/yunxianli/archive/2011/11/07/4111970.html
總結
以上是生活随笔為你收集整理的递归与非递归转换(栈知识应用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吃绿苹果的画是谁画的呢?
- 下一篇: android 布局之RelativeL