循环法解奶牛问题
注释:斐波那契数列的隔项展开
#includeint sum(int n);
int main(){
int n;
scanf("%d",&n);
while(n!=0){
printf("%d\n",sum(n));
scanf("%d",&n);
}
return 0;
}
int sum(int n){
int a1=1,a2=3,a=0,b1=0,b2=2,b=0;
int m;
if(n==1){
return 1;
}
else if(n==2){
return 2;
}
else if(n==3){
return 3;
}
else if(n>3){
for(m=4;m<=n;m++){
if(m%2==0){
b=a1+a2;
b1=b2;
b2=b;
}
else {
a=b1+b2;
a1=a2;
a2=a;
}
}
if(n%2==0){
return b;
}
else return a;
}
}
/* 两组 每组交叉进行构成斐波那契数列
第一组(奇) 1 1 3 6 13 ->1 3 6 13
第二组(偶) 1 2 4 9 19 ->2 4 9 19
递归的循环解法:缩短运行时间
例:sum(n-1)+sum(n-2)=sum(n)
分别将sum(n-1),sum(n-2)赋给a,b
定义c
以 c=a+b
b=a
a=c的形式循环
如果是sum(n-1)+sum(n-3)呢
年份1a 1 1
年份2b 1 2
年份3c 1 1
年份4d 2 2
年份5e 3 1
年份6f 4 2
年份7g 6 1
正常的斐波那契数列 1 1 2 3 5 8 13 */