3000是ms么。。ms的话递归好像跑不出来emm
我目前做出来的思路就是:
对于x,将其输入函数func:
if x==1:
    return 1#如果只剩下一层,只有一种情况
elif x==2:
    return 3 #如果剩下最后两层,返回3(即两种1*2+一种2*2)
else:
    return func(x-1)+2*func(x-2)#即:假定最后一层为1*2,递归,再假定最后一层为竖排的1*2 *2或2*2(此处横排的1*2 *2在前一种情况已经被计算过),递归
具体代码:
- def count_func(x):
 
-     count = 0
 
-     if x == 1:
 
-         return 1
 
-     elif x == 2:
 
-         return 3
 
-     else:
 
-         count += count_func(x - 1) + count_func(x - 2) * 2
 
-         return count
 
 
 
- def non_reverse_count(x):
 
-     list = []
 
-     for each in range(0, x):
 
-         if each == 0:
 
-             list.append(1)
 
-         elif each == 1:
 
-             list.append(3)
 
-         else:
 
-             list.append(list[each - 1] + 2 * list[each - 2])
 
-     return list[x-1]
 
 
 
- def main():
 
-     while True:
 
-         input_number = int(input('input\n'))
 
-         if input_number != -1:
 
-             print(non_reverse_count(input_number))
 
-         else:
 
-             break
 
 
 
- if __name__ == '__main__':
 
-     main()
 
因为递归版本超时,所以附了一个非递归版本