关于递归的一个例子1 取火柴

HZNUOJ 1019 取火柴

题目

有N根火柴,每次只能取1-4根,请问共有几种取法?

举一个例子,假设有3根火柴,取法有4种,分别为1+1+1,1+2,2+1,3。

输入格式

第一行包含一个正整数T(0<T<100),表示进行T次测试。接下来有T行,每行只有一个正整数n(1<=n<=66),代表n根火柴。

输出格式

对于每一个n,输出对应的取法的数量,每次输出占一行。

输入样例

3
1
2
15

输出样例

1
2
10671

思路

首先自然是想到将前四个数字的取法算出,分别计算得到
1根火柴,1种取法
2根火柴,2种取法
3根火柴,4种取法
4根火柴,8种取法
发现前四根是2的n-1次方种
5根火柴时,因无法同时取5根所以会少1种,即少了5自己的组合,想当与少了取一根火柴的时候
6根火柴时,无法同时取5根,6根所以会在5根的基础上少2种即少了5和6的组合,相当于少了取2根火柴的时候
7根火柴时,无法同时取5,6,7三种组合,相当于少了同时取三根火柴的时候
8根,无法同时取5,6,7,8四种的组合,少四根的时候
9根时无法同时取5,6,7,8,9五种的组合,少五根的时候
类推得到,此题为递归算法。
四根火柴以后为后一个为前四个的和。

代码如下

def count(n):
  result = [1,2,4,8]
  if n>4:
      for i in range(n-4):
          result.append(result[-4]+result[-3]+result[-2]+result[-1])
      return result[-1]
  else:
      return result[n-1]
t = int(input())
for j in range(t):
  n = int(input())
  print(count(n))
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值