请多多指教啊。
兔子生长的数目问题描述:
- 第一个月初有一对刚诞生的兔子
- 第二个月之后(第三个月初)它们可以生育
- 每月每对可生育的兔子会诞生下一对新兔子
- 兔子永不死去
假设在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];
}