数值型递归问题的求解方法

编写递归程序的难度较大,在掌握递归的基本概念和递归程序的执行过程之后,还应掌握编写递归程序的基本方法。编写递归程序的前提有两点。一要找出正确的递归算法,这是编写递归程序的基础;二要确定算法的递归结束条件,这是决定递归程序能否正常结束的关键。
我们可以将计算机所求解的问题分为两大类:数值问题和非数值问题。两类问题具有不同的性质,所以解决问题的方法也是不同的。
对于数值问题编写递归程序的一般方法是:建立递归数学模型,确立递归终止条件,将递归数学模型转换为递归程序。
  数值型问题由于可以表达为数学公式,所以可以从数学公式入手,推出问题的递归定义,然后确定问题的边界条件,这样就可以很容易地确定递归的算法和递归结束条件。


  例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 */
}

<!--EndFragment-->
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值