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

问题描述 投票:-7回答:1

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

c
1个回答
3
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.