这是代码

#include<bits/stdc++.h>
using namespace std;
int fib(int n){
    if(n==1 || n==2){
        return 1;
    }else{
        return fib(n-1)%10007+fib(n-2)%10007;
    }
}
int main(){
    int n;
    cin>>n;
    cout<<fib(n);
    return 0;
}

4 条评论

  • @ 2024-4-13 10:55:43

    leilaoshi把题解也删了吧

    • @ 2024-3-2 14:52:51
      #include <iostream>
      #include <stdlib.h>
      #define M 10007
      int main(int argc, char *argv[])
      {
      	long long a1,a2,n,fn,i;
      	a1=a2=1;
      	scanf("%lld",&n);
      	
      	if(n<=2)
      	 printf("%lld",a1);
      	 else
      	 {
      	 	for(i=3;i<=n;i++)
      	 	{
      	 		fn=(a1+a2)%M;
      	 		a1=a2;
      	 		a2=fn;
      		 }
      		 printf("%lld",fn);
      	 }
      
          return 0;
      }
      
      • @ 2024-2-5 8:53:30

        👍

        • @ 2024-2-2 7:43:32

          这题你用递归铁超时,因为递归的时候会有一些部分重复算,比如你好不容易算出来f(9)=34,f(10)=55f(9)=34, f(10)=55,但是算f(11)f(11)时又得重算一遍,得用递推:

          #include<bits/stdc++.h>
          using namespace std;
          int a[1000001];
          int main(){
              int n;
              cin>>n;
              a[1]=1;
              a[2]=1;
              for(int i=3;i<=n;i++){
                  a[i]=(a[i-1]+a[i-2])%10007;
              }
              cout<<a[n];
          }
          
        • 1