【题目】

log(n)时间Fib(n),本质log(n)求a^n。

代码】

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
 
#include "stdafx.h"
#include <iostream>
using namespace std;

/*
f(0) = 0.
f(1) = 1.
f(N) = f(N-1) + f(N-2)_ (N>=2)

see http://blog.linjian.org/articles/fibonacci-essay/ for more detail
*/

// recursive
unsigned int rfib(unsigned int n)
{
    // o(2^n)
)
    {
        return n;
    }
    else
    {
        );
    }
}

// use table to reuse value : forward

};
unsigned int tfib_forward(unsigned int n)
{
    // o(n)
;
    f[;
    ; i <= n; ++i)
    {
        f[i] = f[i - ];
    }
    return f[n];
}

// use table to reuse value : backward
unsigned int tfib_backward(unsigned int n)
{
    )
    {
        f[n] = n;
        return f[n];
    }
    else
    {
        )
            f[n] = tfib_backward(n - );
        return f[n];
    }
}

// use temp value instead of table
unsigned int fib(unsigned int n)
{
    // o(n)
)
    {
        return n;
    }
    else
    {
        , c;
        ; i <= n; ++i)
        {
            c = a + b;
            a = b;
            b = c;
        }
        return c;
    }
}

// use template meta programming #1 struct-enum
// enum has value range
#define FIBE(N) FibE<N>::Val

template<int N>
struct FibE
{
    enum
    {
        Val = FibE < N -  >::Val
    };
};

template<>
>
{
    enum
    {
        Val = 
    };
};

template<>
>
{
    enum
    {
        Val = 
    };
};

// use template meta programming # class-static const
#define FIBC(N) FibC<N>::val

template<int N>
class FibC
{
public:
     >::val;
};

template<>
>
{
public:
    ;
};

template<>
>
{
public:
    ;
};

// use calss-function
class Fib
{
public:
    Fib() : a()
    {
    }
    unsigned int operator()()
    {
        )
        {
            n++;
            ;
        }
        else
        {
            int c;
            c = a + b;
            a = b;
            b = c;
            return c;
        }
    }
private:
    int a, b, n;
};

// test
void test_tfib_forward()
{
    ; i < MAX; ++i)
    {
        cout << tfib_forward(i) << " ";
    }
}

void test_metaFibE()
{
    cout << FIBE() << endl;
}

void test_metaFibC()
{
    cout << FIBC() << endl;
}

void test_cfib()
{
    ;
    Fib fib;
    do
    {
        cout << fib() << endl;
    }
    while (i--);
}

int main()
{
    //test_tfib_forward();
    test_metaFibE();
    test_metaFibC();
    test_cfib();

system("pause");
    ;
}

【参考】

http://zhedahht.blog.163.com/blog/static/25411174200722991933440/

http://blog.csdn.net/foolishwolf_x/article/details/8774874

最新文章

  1. IOS基础之 (二) 面向对象思想
  2. Linux vsftpd 无法登录 cannot change directory:xxx priv_sock_get_cmd 问题
  3. 【原创】解决国内Android SDK无法更新问题更新
  4. Android(java)学习笔记218:开发一个多界面的应用程序之人品计算器的简单实现
  5. 很棒的jQuery代码片段分享
  6. ajax后台处理返回json值
  7. java 图片质量压缩
  8. 为IE8添加EventListener系列方法支持
  9. JS 特殊字符的验证的问题
  10. 棋盘 chess
  11. ios6和ios5横竖屏切换
  12. 洛谷 p1090 合并果子
  13. Charles断点调试
  14. 浮点数运算结果不精确,以及用String来构造BigDecimal进行浮点数精确计算
  15. 爬虫_拉勾网(selenium)
  16. 深度学习论文翻译解析(二):An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition
  17. 让DOM从页面中消失的方法
  18. Nodejs学习笔记:基础
  19. 利用word的VBA,为代码统一表格宽度,底色及行号
  20. Netty源码分析第3章(客户端接入流程)----&gt;第4节: NioSocketChannel注册到selector

热门文章

  1. 【BZOJ】3527: [Zjoi2014]力(fft+卷积)
  2. Maven-改变本地存储仓库位置
  3. 【FE前端学习】第二阶段任务-基础
  4. POJ1089 Intervals
  5. POJ 1273 Drainage Ditches -dinic
  6. java连接mysql(二)
  7. 领域模型中的实体类分为四种类型:VO、DTO、DO、PO
  8. iOS系统navigationBar背景色,文字颜色处理
  9. mysql随机获取一条或者多条数据
  10. [Asp.net Mvc]通过UrlHelper扩展为js,css静态文件添加版本号