要求:
https://www.dotcpp.com/oj/problem1004.html
说明:
用函数,时间超限了
关于递归掌握的并不好,贴两段代码:
超限代码:
#include <stdio.h>
int sum;
int F(int n){
if(n == 1){
sum = 1;
}
else if(n == 2){
sum = 2;
}
else if(n == 3){
sum = 3;
}
else{
return F(n-1) + F(n-3);//从第4年开始有递归!!
}
return sum;
}
int main(){
int n;
while(scanf("%d",&n) != EOF,n){
printf("%d\n",F(n));
}
}
把if else精简化了:
#include <stdio.h>
int sum;
int F(int n){
if(n <4){
sum = n;
}
else{
return F(n-1) + F(n-3);//从第4年开始有递归!!
}
return sum;
}
int main(){
int n;
while(scanf("%d",&n) != EOF,n){
printf("%d\n",F(n));
}
return 0;
}
参考大神时间效率高的代码:
#include<iostream>
#include<cstdio>
using namespace std;
int f[60];
int n;
int main()
{
f[1]=1;
f[2]=2;
f[3]=3;
for(int i=4;i<60;++i){//用个for循环先算一遍
f[i]=f[i-1]+f[i-3];
}
while(scanf("%d",&n)!=EOF){
if(n==0) break;
printf("%d\n",f[n]);
}
return 0;
}