取代递归算法的费事费力
在oj系统中,经常遇到使用递归算法然后超时的情况。所以,在此记个笔记
有题意可推出算法的公式为sum[n]=sum[n-1]+sum[n-4]
递归算法
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* @author Cody
* @date 2020/6/11 - 11:17
*/
public class Main {
public static int sum(int n){
if(n<0){
return 0;
}
if(n==0||n==1||n==2||n==3){
return 1;
}
return sum(n - 1) + sum(n - 4);
}
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String s =reader.readLine();
int n;
n=Integer.parseInt(s);
System.out.println(sum(n));
}
}
利用数组进行替代
省时省力
#include<stdio.h>
long long int a[100005];
long long int sum(int n){
if (n<0)
{
return 0;
}
else if(n==0||n==1||n==2||n==3){
return 1;
}
a[0]=a[1]=a[2]=a[3]=1;
for(int i=4;i<=n;i++){
a[i]=a[i-1]+a[i-4];
}
return a[n];
}
int main(){
long long int n;
scanf("%lld",&n);
printf("%lld",sum(n));
return 0;
}