首页 > 其他 > 详细

递归的循环实现

时间:2019-04-04 15:39:58      阅读:149      评论:0      收藏:0      [点我收藏+]
 1 vector<int> chosen;
 2 int stack[100010],top=0,address=0,n,m;
 3 
 4 void call(int x,int ret_addr)
 5 {
 6     int old_top=top;
 7     stack[++top]=x;
 8     stack[++top]=ret_addr;
 9     stack[++top]=old_top;
10 }
11 
12 int ret()
13 {
14     address=stack[top-1];
15     top=stack[top];
16 }
17 
18 int main()
19 {
20     cin>>n>>m;
21     call(1,0);
22     while(top)
23     {
24         int x=stack[top-2];
25         switch(address)
26         {
27             case 0:
28                 if(chosen.size()>m||chosen.size()+(n-x+1)<m)
29                 {ret();continue;}
30                 if(x==n+1)
31                 {
32                     for(int i=0;i<chosen.size();++i)
33                         printf("%d ",chosen[i]);
34                     printf("\n");
35                     ret();
36                     continue;
37                 }
38                 call(x+1,1);
39                 address=0;
40                 continue;
41             case 1:
42                 chosen.push_back(x);
43                 call(x+1,2);
44                 address=0;
45                 continue;
46             case 2:
47                 chosen.pop_back();
48                 ret();
49         }
50     }
51 }

 

递归的循环实现

原文:https://www.cnblogs.com/universeplayer/p/10655104.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!