【发布时间】:2021-02-10 02:29:01
【问题描述】:
【问题讨论】:
-
看起来根本不是编程问题。这似乎是离散数学课的家庭作业问题。
-
@JohnColeman 是的,我需要提示 :)
-
编写一个 Python 程序来暴力破解小
n的答案很容易。出于我不能说清楚的原因,我怀疑答案与斐波那契数有关。
【问题讨论】:
n 的答案很容易。出于我不能说清楚的原因,我怀疑答案与斐波那契数有关。
由于程序不是证明,你仍然需要证明它,这里有一些 Python 代码:
def zig_zag(seq):
"""tests if binary sequence seq satsifies zig-zag pattern"""
for i in range(len(seq)-1):
if (i%2 == 0 and seq[i] > seq[i+1]) or (i%2 == 1 and seq[i] < seq[i+1]):
return False
return True
def count_zig_zags(n):
"""counts the number of binary zig-zag patterns of length n"""
count = 0
for i in range(2**n):
b = bin(i)[2:]
if zig_zag(b): count += 1
return count
例如:
>>> [count_zig_zags(n) for n in range(1,12)]
[2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233]
证明将通过强归纳。
【讨论】:
n 的有效解可以通过1 种方式或2 种方式扩展为长度为n+1 的有效解,并且可以是以 2 种方式扩展与长度为 n-1 的有效序列的数量相同(证明,这似乎需要 2 种情况,具体取决于 n 是偶数还是奇数,未给出)。