zoukankan      html  css  js  c++  java
  • Fibonacci C语言实现

     1 long long int Fibonacci(int n)
     2 {
     3     int i;
     4     long long int *dp, ret;
     5     dp = malloc(sizeof(long long int ) * (n+1));
     6     
     7     dp[0]=0; dp[1] = 1; 
     8     for (i=2; i<= n; i++) {
     9         dp[i] = dp[i-1] + dp[i-2];
    10     }
    11     ret = dp[n];
    12     free(dp);
    13     return ret;
    14 }

    上面就是之前写的代码,看上去能够解决问题,但是今天看了https://www.cnblogs.com/MonsterJ/p/13154306.html 的分析,感觉自己弱爆了,连时间复杂度都没分析.

    直接上时间更优化的代码:

     1  int fib(int N) {
     2         if (N == 0) {
     3             return 0;
     4         }
     5         if (N== 1) {
     6             return 1;
     7         }
     8         int *notes = malloc(sizeof(int) * (N+1));
     9         if (notes == NULL) 
    10             return -1;
    11         
    12         notes[0] = 0;
    13         notes[1] = 1;
    14        int i;
    15         for( i = 2; i <= N; i++) {
    16             notes[i] = notes[i-1] + notes[i-2];
    17         }
    18         int res = notes[N];
    19         free(notes);
    20         return  res;
    21     }

    再上空间上更简化的代码:

     int fib(int N) {
            int a = 0;
            int b = 1;
            if(N == 0) {
                return a;
            }
            if(N == 1) {
                return b;
            }
            for(int i = 2; i <= N; i++) {
                int tmp = a + b;
                a = b;
                b = tmp;
            }
            return b;
        }
  • 相关阅读:
    21 情态动词
    20 动词的用法
    19 完成时/现在完成时和过去完成时的区别
    18 将来时
    17 一般过去时和过去进行时
    16 一般现在时和现在进行时
    15 There / Here be句型
    14 不定量表达法
    13 副词
    12 形容词
  • 原文地址:https://www.cnblogs.com/micoblog/p/12986431.html
Copyright © 2011-2022 走看看