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