有 一道清华复试上机题 引发的思考,持续更新中……

Microsoft、CSIL、Hisoft,必须algorithm。从现在开始,步入算法和逻辑思维的研究大军中。

数的分解 :任何数都能分解成2的幂,比如
7=1+1+1+1+1+1+1
=1+1+1+1+1+2
=1+1+1+2+2
=1+2+2+2
=1+1+1+4
=1+2+4
求任意整数 n(n<100亿)的此类划分数

计算f(2m)=f(0)+f(1)+...+f(m)

现有递推公式:f(2m + 1) = f(2m)
       f(2m) = f(2m - 2) + f(m)
初始条件:   f(0) = f(1) = 1
易知:f(2m) = f(0) + f(1) + ... + f(m)
要求:写一个 C#或C++程序,对任意输入的n(0≤n<100亿),计算f(n)。
对于较大的n,f(n)会超出UInt64所能表示的范围,结果 可以存储为BigInteger。
参考:http://www.cnblogs.com/skyivben/archive/2008/07/25/1251697.html
以 及:http://www.cnblogs.com/skyivben/archive/2008/07/13/1241681.html

可 以利用递推公式写一个递归的程序,对于很大的n,程序有可能无法完成计算(来源贴13楼)。
可以计算 f(0) + f(1) + ... + f(m),对于很大的n,存储空间可能不够(来源贴30楼)。
核心提示: 该问题已在129楼由litaoye 完美解决。125楼mathe 也 给出了很好的思路。31日晚上结贴。

你可能感兴趣的:(思考)