递推

来源:互联网 发布:淘宝买东西限额怎么办 编辑:程序博客网 时间:2024/04/29 04:20

递推与递归的区别:

n       递推是数学上的概念,主要是指递推式或者说递推数列,递推函数,也就是说一个数列的下面一项有它的前面几项的值的一种运算(或者函数)构成,

n       比如a[n]=a[n-1]+a[n-2];
递归是计算机中的概念,主要是指递归函数(计算机中函数同数学上函数意义也不相同,是指一段代码),就是指会调用自己的函数。显然,数学中的递推函数在计算机实现中可以通过递归来实现,但不一定要通过递归来实现。
比如上面的数列,可以通过递归来实现为:
  int Fib(int n){
  if(n<=2)return 1;
  return Fib(n-1)+Fib(n-2);
  }

 

但是,也可以不通过递归(函数不调用自己)来实现,比如
  int Fib(int n){
  int f1=1,f2=1;
  int i;
  if(n<=2)return 1;
  for(i=3;i<=n;i++){
  int f=f1+f2;
  f1=f2;f2=f;
  }
  return f;
  }

 

例题:

某人写了n封信和n个信封,如果所有的信都装错了信封。求所有的信都装错信封,共有多少种不同情况。

1、当N=12时,易得解~,假设F(N-1)F(N-2)已经得到,重点分析下面的情况:

2、当有N封信的时候,前面N-1封信可以有N-1或者 N-2封错装

3、前者,对于每种错装,可从N-1封信中任意取一封和第N封错装,故=F(N-1)*(N-1)

4、后者简单,只能是没装错的那封和第N封交换信封,没装错的那封可以是前面N-1封中的任意一个,故= F(N-2) * (N-1)

基本形式:d[1]=0;   d[2]=1
递归式:d[n]= (n-1)*( d[n-1] + d[n-2])

这就是著名的错排公式J

 

原创粉丝点击