数值型递归问题的求解方法
例9-29:请用递归的方法计算下列函数的值:
px(x,n) = x - x2 + x3 - x4 + ...... (-1)n-1xn (n>0)
这是一个数值型问题。函数的定义不是递归定义形式。对原来的定义进行数学变换:
px(x,n) = x - x2 + x3 - x4 + ...... (-1)n-1xn
= x * ( 1 - x + x2 - x3 + x4 - ...... (-1)n-1xn-1 )
= x * ( 1 - ( x - x2 + x3 - ...... (-1)n-2xn-1 ) )
= x * ( 1 - px(x,n-1))
经变换后,可以将原来的非递归定义形式转化为等价的递归定义:
x 当 n=1 时
x * ( 1 - px(x,n-1) ) 当 n>1 时
由此递归定义,可以确定递归算法和递归结束条件。递归程序如下:
#include <stdio.h>
double px ( double x, int n )
{ if (n==1) return ( x ); /* 当n=1时,结束递归 */
else return ( x * ( 1 - px(x,n-1) ) ; /* 否则按函数的定义继续计算 */
}
main( )
{ double x; int n;
printf("Enter X and N:");
scanf ("%lf%d", &x, &n);
printf("px=%lf\n", px(x, n) ); /* 调用函数px */
}