问题描述:用G(n)表示在有n位的二进制数中没有相邻的两个1的二进制数个数。比如,当n=3时,000,001,010,011,100,101,110,111这8个数中只有000,001,010,100,101这5个是没有相邻为1的,故G(3)=5。请写一个程序,输出G(n)的值。
错误的思路(考虑的不周全):采用"分治"的方法,比如n=3,每次都将处理原问题规模的二分之一,直到n=1时,就很容易可以知道有两种情况。前面是"分",然后是"合"。比如把规模为n的问题分成了p1和p2部分,而且p1和p2问题都已经解决,个数已经知道。那么,把p1和p2合起来的时候就只需要注意p1的最右边和p2的最左边的数不能同时为1,即:合起来的总的个数是:1*(p2-1)+(p1-1)*p2。"递归"和"分治"不分家,所以很容易写出下面的程序。
以下是错误的代码。
错误的代码
1 int calculate(int n)
2 {
3