问题:
利用栈实现递归函数的非递归计算
其递归表达式如下:
Pn(x)=
1 ,n=0
2*x ,n=1
2*x*Pn-1(x)-2*(n-1)Pn-2(x) ,n>1
算法实现:
double Pn(int n, double x){
struct stack{
int no;
double value;
}s[maxsize];
int top = -1, i;
double fv1 = 1, fv2 = 2 * x;
for(i = n; i>=2; i--){
top++;
s[top].no = i;
}
while(top >= 0){
s[top].value = 2 * x * fv2 - 2 * (s[top].no - 1) * fv1;
fv1 = fv2;
fv2 = s[top].value;
top--;
}
if(n == 0){
return fv1;
}else{
return fv2;
}
}