日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

规范化的递归转换成非递归

發布時間:2025/7/14 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 规范化的递归转换成非递归 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

遞歸函數被調用時,系統需要一個運行棧。系統的運行棧要保存函數的返回地址,保存調用函數的局部變量,每一層遞歸調用所需保存的信息構成運行棧的一個工作記錄,在沒進入下一層遞歸調用是,系統就會建立一個新的工作記錄,并把這個工作記錄進棧成為運行棧新的棧頂,每返回一層遞歸調用,就退棧一個工作記錄,因棧頂的工作記錄必定是當前正在運行的遞歸函數的工作記錄,所以棧頂的工作記錄也稱為活動記錄。

?

對于此系統對于遞歸的處理,我們可以把它交個函數,這就可以實現規范化的遞歸轉換成非遞歸

Example:

非遞歸求階乘

//利用非遞歸求階乘 #include<iostream> using namespace std;//結點 struct Node {int data;Node*next; };//鏈表棧 class LinkStack { public:LinkStack(){top=new Node;top=NULL;} ~LinkStack(){delete top;}void push(int item);int pop();bool isEmpty()const; private:Node *top; };void LinkStack::push(int item) {Node *p=new Node;p->data=item;p->next=top;top=p; }int LinkStack::pop() {Node *p=top;int a=p->data;top=p->next;delete p;return a; }bool LinkStack::isEmpty()const {return top==NULL; }int main() {int n;cin>>n;LinkStack *s=new LinkStack;int result=1;while(n>0||!s->isEmpty()){if(n>0){s->push(n);n--;}else result*=s->pop();}cout<<result<<endl;return 0; }

?

轉載于:https://www.cnblogs.com/KennyRom/p/5920147.html

總結

以上是生活随笔為你收集整理的规范化的递归转换成非递归的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。