整数分解为2的幂(递归)C语言

这篇博客介绍了如何使用C语言解决一个正整数分解为2的幂的递归问题。文章通过两种方法展示了递归算法,其中第一种方法虽然正确但会导致超时,而第二种方法通过预计算并存储结果避免了重复计算,提高了效率。
摘要由CSDN通过智能技术生成

最近遇到这样的一道题,用到了递归,采用两种办法实现,第一种超时,第二种满足要求。算法小白也算是递归有了一个初探。题目如下:

一个正整数可以表示为多个正整数相加的表达式,表达式中的各个正整数要求都是2的幂。例如给定正整数7,它有下列六个符合要求的表达式:
1)1+1+1+1+1+1+1 
2)1+1+1+1+1+2 
3)1+1+1+2+2 
4)1+1+1+4 
5)1+2+2+2 
6)1+2+4
因此,正整数7符合条件的表达式个数是6. 编写一个程序,对于给定的正整数N(1 <= N <= 1,000),输出符合条件的表达式个数。要求:时间复杂度不高于O(N)。

起初没有思路,参考http://blog.csdn.net/zhang20072844/article/details/17033931 用C写了两种方法。


一、递推公式

    我们可以先分析如下几个例子:

1的分解方法 有1种

   1

2的分解方法 有2种

   1 +1

   2

3的分解方法 有2种

   1+1+1

   1+2

4的分解方法 有4种

   1+1+1+1

   1+1+2

   2+2

   4

5的分解方法有 4种

  1+1+1+1+1

  1+1+1+2

  1+2+2

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值