我必须编写一个程序,对于每个给定的n> 0,写下每个长度为0-1的单个0-1序列,其中1不能坐在任何其他1的旁边。
例如:对于n = 3,输出为:
000,001,010,100,101
我考虑了递归,但在这种情况下无法使用它。
任何提示都将受到高度赞赏。
答案 0 :(得分:2)
只需排除连续1的结果即可。 以下是示例java代码:
public class Test0 {
public static void main (String [] args) {
int n = 4;
for(int i = 0; i < Math.pow(2,n); i++) {
if ( (i & (i << 1)) != 0 )
continue;
System.out.println( i/8 % 2 + "" + i/4 % 2 + "" + i/2 % 2 + "" + i % 2);
}
}
}
如果有两个连续1,表达式i & (i << 1))
将导致非零,否则为0.
答案 1 :(得分:2)
既然你要求提示并提到了递归,这里有一个递归提示:
{{1}}
答案 2 :(得分:1)
这是一个Python递归解决方案:
def rec(n,a=''):
if len(a)==n:
print a
return
rec(n,a+'0')
if len(a)==0 or a[-1]!='1':
rec(n,a+'1')
rec(3)
打印:
000
001
010
100
101
实际上,Zeckendorf's theorem证实了这个序列中的第n个项等于数字n的Zeckendorf表示(用Fibonacci项表示数字)。这解释了为什么选择的数量由斐波纳契数给出。