二进制位数为n,其中没有1在相邻两个数位上,求有几种可能
设f[i]表示第前i位有几种可能,o[i]记录前i位最后一位为1的个数
则o[i]=f[i-1]-o[i-1], (1)
f[i]=f[i-1]+o[i], (2)
f[i-1]表示第i位为0的情况,o[i]表示第i位为1的情况
进一步推导:o[i]=f[i-1]-o[i-1]=(f[i-2]+o[i-1])-o[i-1]=f[i-2]
所以得出f[i]=f[i-1]+f[i-2],即若第i位为0的情况,前面f[i-1]包含的情况都满足,若第i位为1,则第i-1位必为0,则前i-2位包含的情况都满足,这是一个Fibonacci数列
代码: