动态规划——斐波那契算法

来源:互联网 发布:干部网络考试答案 编辑:程序博客网 时间:2024/05/21 06:20

请多多指教啊。

兔子生长的数目问题描述:

  • 第一个月初有一对刚诞生的兔子
  • 第二个月之后(第三个月初)它们可以生育
  • 每月每对可生育的兔子会诞生下一对新兔子
  • 兔子永不死去

假设在n月有可生育的兔子总共a对,n+1月就总共有b对。在n+2月必定总共有a+b对: 因为在n+2月的时候,前一月(n+1月)的b对兔子可以存留至第n+2月(在当月属于新诞生的兔子尚不能生育)。而新生育出的兔子对数等于所有在n月就已存在的a对。

表达式描述:

f(0) = 1;

f(1) = 1;

f(n) = f(n-2) + f(n-1)(n>=2);

实现代码如下:

#include <stdio.h>


long c[2] = {1,1};
long flag = 2;


long fib(long);
long swap(long *);
long fib_inefficient(long);


void main(){
  long test = 0 ;  
  test = fib(45);
  printf("%ld\n",test);
  test = fib_inefficient(45); 
  printf("%ld\n",test);
}


long fib_inefficient(long n){
  if(n==0||n==1){
     return 1;
   }else{
     return fib_old(n-1)+fib_old(n-2);
   }
}


long fib(long n){
   if(flag==n){
       return swap(c);
     }
    else if(n==1||n==0){
       return 1;
    }
    else{
       return fib(n-2)+fib(n-1);
     }
}


long swap(long *c){    
    long tmp = c[1];
    c[1] = tmp + c[0];
    c[0] = tmp;
    flag++;
    return c[1];
}

0 0