- 论坛徽章:
- 0
|
改善后的:用了一个全局数组,存储计算过的f[year],消除递归。
不知道对不对,大家指正:
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <functional>
- #include <string>
- #include <iterator>
- #include <map>
- #include <vector>
- #include <time.h>
- using namespace std;
- typedef double ULONG;
- ULONG get_cow_num(int year);
- ULONG f(int year);
- ULONG ff[101] = { 0 };
- void main()
- {
- memset(ff, 0, sizeof(ff));
-
- printf("%.f\n", get_cow_num(100));// << endl;
- }
- ULONG get_cow_num(int year)
- {
- ULONG sum = 0;
- for( int i = 1; i <= year; ++i )
- {
- ULONG temp = f(i);
- sum += temp;
- printf("f(%d) = %.f, finished! sum[%d] = %.f\n", i, temp, i, sum);
- }
- return sum;
- }
- ULONG f(int year)
- {
- if( ff[year] ) return ff[year];
- ULONG ret = 0;
- ULONG temp = 0;
- switch(year)
- {
- case 1:
- ret = 1;
- break;
- case 2:
- case 3:
- ret = 0;
- break;
- case 4:
- ret = 1;
- break;
- default:
- for( int k = 1; k <= year - 3; ++k )
- {
- // ret += f(k), 不需要了
- ret += ff[k];
- }
- }
- ff[year] = ret;
- return ret;
- }
复制代码
输出:
- f(1) = 1, finished! sum[1] = 1
- f(2) = 0, finished! sum[2] = 1
- f(3) = 0, finished! sum[3] = 1
- f(4) = 1, finished! sum[4] = 2
- f(5) = 1, finished! sum[5] = 3
- f(6) = 1, finished! sum[6] = 4
- f(7) = 2, finished! sum[7] = 6
- f(8) = 3, finished! sum[8] = 9
- f(9) = 4, finished! sum[9] = 13
- f(10) = 6, finished! sum[10] = 19
- f(11) = 9, finished! sum[11] = 28
- f(12) = 13, finished! sum[12] = 41
- f(13) = 19, finished! sum[13] = 60
- f(14) = 28, finished! sum[14] = 88
- f(15) = 41, finished! sum[15] = 129
- f(16) = 60, finished! sum[16] = 189
- f(17) = 88, finished! sum[17] = 277
- f(18) = 129, finished! sum[18] = 406
- f(19) = 189, finished! sum[19] = 595
- f(20) = 277, finished! sum[20] = 872
- f(21) = 406, finished! sum[21] = 1278
- f(22) = 595, finished! sum[22] = 1873
- f(23) = 872, finished! sum[23] = 2745
- f(24) = 1278, finished! sum[24] = 4023
- f(25) = 1873, finished! sum[25] = 5896
- f(26) = 2745, finished! sum[26] = 8641
- f(27) = 4023, finished! sum[27] = 12664
- f(28) = 5896, finished! sum[28] = 18560
- f(29) = 8641, finished! sum[29] = 27201
- f(30) = 12664, finished! sum[30] = 39865
- f(31) = 18560, finished! sum[31] = 58425
- f(32) = 27201, finished! sum[32] = 85626
- f(33) = 39865, finished! sum[33] = 125491
- f(34) = 58425, finished! sum[34] = 183916
- f(35) = 85626, finished! sum[35] = 269542
- f(36) = 125491, finished! sum[36] = 395033
- f(37) = 183916, finished! sum[37] = 578949
- f(38) = 269542, finished! sum[38] = 848491
- f(39) = 395033, finished! sum[39] = 1243524
- f(40) = 578949, finished! sum[40] = 1822473
- f(41) = 848491, finished! sum[41] = 2670964
- f(42) = 1243524, finished! sum[42] = 3914488
- f(43) = 1822473, finished! sum[43] = 5736961
- f(44) = 2670964, finished! sum[44] = 8407925
- f(45) = 3914488, finished! sum[45] = 12322413
- f(46) = 5736961, finished! sum[46] = 18059374
- f(47) = 8407925, finished! sum[47] = 26467299
- f(48) = 12322413, finished! sum[48] = 38789712
- f(49) = 18059374, finished! sum[49] = 56849086
- f(50) = 26467299, finished! sum[50] = 83316385
- f(51) = 38789712, finished! sum[51] = 122106097
- f(52) = 56849086, finished! sum[52] = 178955183
- f(53) = 83316385, finished! sum[53] = 262271568
- f(54) = 122106097, finished! sum[54] = 384377665
- f(55) = 178955183, finished! sum[55] = 563332848
- f(56) = 262271568, finished! sum[56] = 825604416
- f(57) = 384377665, finished! sum[57] = 1209982081
- f(58) = 563332848, finished! sum[58] = 1773314929
- f(59) = 825604416, finished! sum[59] = 2598919345
- f(60) = 1209982081, finished! sum[60] = 3808901426
- f(61) = 1773314929, finished! sum[61] = 5582216355
- f(62) = 2598919345, finished! sum[62] = 8181135700
- f(63) = 3808901426, finished! sum[63] = 11990037126
- f(64) = 5582216355, finished! sum[64] = 17572253481
- f(65) = 8181135700, finished! sum[65] = 25753389181
- f(66) = 11990037126, finished! sum[66] = 37743426307
- f(67) = 17572253481, finished! sum[67] = 55315679788
- f(68) = 25753389181, finished! sum[68] = 81069068969
- f(69) = 37743426307, finished! sum[69] = 118812495276
- f(70) = 55315679788, finished! sum[70] = 174128175064
- f(71) = 81069068969, finished! sum[71] = 255197244033
- f(72) = 118812495276, finished! sum[72] = 374009739309
- f(73) = 174128175064, finished! sum[73] = 548137914373
- f(74) = 255197244033, finished! sum[74] = 803335158406
- f(75) = 374009739309, finished! sum[75] = 1177344897715
- f(76) = 548137914373, finished! sum[76] = 1725482812088
- f(77) = 803335158406, finished! sum[77] = 2528817970494
- f(78) = 1177344897715, finished! sum[78] = 3706162868209
- f(79) = 1725482812088, finished! sum[79] = 5431645680297
- f(80) = 2528817970494, finished! sum[80] = 7960463650791
- f(81) = 3706162868209, finished! sum[81] = 11666626519000
- f(82) = 5431645680297, finished! sum[82] = 17098272199297
- f(83) = 7960463650791, finished! sum[83] = 25058735850088
- f(84) = 11666626519000, finished! sum[84] = 36725362369088
- f(85) = 17098272199297, finished! sum[85] = 53823634568385
- f(86) = 25058735850088, finished! sum[86] = 78882370418473
- f(87) = 36725362369088, finished! sum[87] = 115607732787561
- f(88) = 53823634568385, finished! sum[88] = 169431367355946
- f(89) = 78882370418473, finished! sum[89] = 248313737774419
- f(90) = 115607732787561, finished! sum[90] = 363921470561980
- f(91) = 169431367355946, finished! sum[91] = 533352837917926
- f(92) = 248313737774419, finished! sum[92] = 781666575692345
- f(93) = 363921470561980, finished! sum[93] = 1145588046254325
- f(94) = 533352837917926, finished! sum[94] = 1678940884172251
- f(95) = 781666575692345, finished! sum[95] = 2460607459864596
- f(96) = 1145588046254325, finished! sum[96] = 3606195506118921
- f(97) = 1678940884172251, finished! sum[97] = 5285136390291172
- f(98) = 2460607459864596, finished! sum[98] = 7745743850155768
- f(99) = 3606195506118921, finished! sum[99] = 11351939356274688
- f(100) = 5285136390291172, finished! sum[100] = 16637075746565860
- 16637075746565860
- Press any key to continue
复制代码
[ 本帖最后由 dzbjet 于 2006-9-7 17:16 编辑 ] |
|