Luouy~羽林
学问如逆水行舟,不进则退; 有知识的人不实践,等于一只蜜蜂不酿蜜; 我们可以由读书而收集知识,但必须利用思考把糠和谷子分开
在高中数学中,我们学习过数列。我们知道数列有两种表示方法,一种称为通项公式,即项an和项数n的关系;还有一种称为递推公式,即后一项an和前一项a(n-1)之间的关系。通项公式能够一下子把an求解出来,而递推公式则要根据首项的值多次推导才能把第n项的值慢慢推导出来。如果有一个较为复杂的数列的递推公式,人工将其转化为通项公式或者将其的每一项求出实在非常麻烦,那么我们能不能直接把这个递推公式交给计算机,让它来为我们求解呢?

我们说过,在任何一个函数体内不能出现其它函数的定义。但是,在任一个函数体内可以调用任何函数,包括该函数本身。直接或者间接地在函数体内调用函数本身的现象称为函数的递归。正是函数的递归,能够帮我们解决递推公式求解的问题。

现有一个数列,已知an=2*a(n-1)+3,并且a1=1,求解a1到a8的各项值。我们把数列问题转化为函数问题,认为an=f(n),a(n-1)=f(n-1)……于是f(n)=2*f(n-1)+3,f(n-1)=2*f(n-1-1)+3……直到f(1)=1。我们根据前面的描述写出以下程序:(程序6.6)
#include "iostream.h"
int f(int n);//看作数列an
int main()
{
   for (int i=1;i<=8;i++) 
   {
      cout <<"f(" <<i <<")=" <<f(i) <<endl;//输出a1到a8的值
   }
   return 0;
}
int f(int n)
{
   if (n==1)
   {
      return 1;//告知a1=1
   }
   else
   {
      return 2*f(n-1)+3;//告诉电脑f(n)=2*f(n-1)+3
   }
}
运行结果:
f(1)=1
f(2)=5
f(3)=13
f(4)=29
f(5)=61
f(6)=125
f(7)=253
f(8)=509

这个是不是跟C#的思路一样? 

posted on 2012-08-09 16:25  羽林.Luouy  阅读(732)  评论(0编辑  收藏  举报