递归与非递归转换(栈知识应用)

来源:互联网 发布:股市数据分析 编辑:程序博客网 时间:2024/05/28 16:04

下面例题是一次作业中遇到的,很值得体味,与大家共享下。

 递归代码:

long f(long m,long n){long sum;if(m==0) sum=n+1;else if(n==0) sum=f(m-1,1);else k=f(m-1,f(m,n-1));return sum;}


 用递归来做很明了,当我们明白了递归所走的整个流程后,下面我们用栈来实现非递归的转换。

 非递归代码:

 

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;}


 

原创粉丝点击