说白了就是 斐波那契数列
递归
#include<stdio.h>
int f(int n){
if(n<=0)
return n;
if(n<=4)//两个if判断结束标志
return n;
return f(n-1)+f(n-3);//发现数列是1 2 3 4 6 9 ... 此数等于n-1个+n-3个
}
int main(){
int n;
while(~scanf("%d",&n)){
if(n==0)
return 0;
printf("%d\n",f(n));
}
}
//非递归形式
#include<stdio.h>
//int f(int n){
// if(n<=0)
// return n;
// if(n<=4)//两个if判断结束标志
// return n;
// return f(n-1)+f(n-3);//发现数列是1 2 3 4 6 9 ... 此数等于n-1个+n-3个
//}
int main(){
int n;
while(~scanf("%d",&n)){
if(n==0)
return 0;
else if(n<=4)
printf("%d\n",n);
else{
int front=4,rear=2,num=0,mid=3;
for(int i=0;i<n-4;i++){
num=front+rear;
int temp=front;
front=num;
rear=mid;//与后一步不可交换顺序 要不然就要多写应该变量
mid=temp;
}
printf("%d\n",num);
}
}
}