在C语言中,如何打印所有大小为N的二进制数,而没有连续2个0的递归

时间:2017-12-15 06:30:52

标签: c

如何打印所有大小为N的二进制数,而没有连续2次0的递归? 根本不使用数组,也不使用循环。 它们需要按照顺序打印。 例如: N = 3: 010 011 101 110 111

1 个答案:

答案 0 :(得分:3)

这里有两个不同的问题。首先是算法:如何独立于任何语言或约束递归地执行任务。简单:

  • 递归函数采用0或1
  • 的序列
  • 如果序列的长度为N,则只需打印并返回
  • else如果最后一个元素是1递归两次,一次通过向序列添加0,一次添加1
  • 其他只能通过添加1
  • 来递归一次

只需用单例0和单例1调用该函数即可完成。

第二部分是C实现。您可以使用int(假设N不大于int中的位数)并使用位移,保持设置的位数以存储序列。如果留作练习,实际执行......