递归与非递归转换(栈知识应用)
下面例题是一次作业中遇到的,很值得体味,与大家共享下。
递归代码:
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; }