我需要从字符集中生成所有可能的组合。
"abcdefghijklmnopqstuvxyz"
生成的模式应该像这样输出。
a
b
...
z
aa
ab
...
az
ba
...
这将在长度为 8 的情况下完成。即a=>zzzzzzzz
。我已经通过用 C 编写一个示例来解决这个问题,并为此使用了递归函数。我知道它写得又快又脏,但希望你能有所了解。
#include <stdio.h>
#include <string.h>
#define WIDTH 8
char *charset = "abcdefghijklmnopqrstuvxyz";
void charset_r(int width, int pos, char *s)
{
char buf[WIDTH];
char *p = charset;
while(*p!='\0')
{
strcpy(buf, s);
if(pos<width)
{
strncat(buf, p, 1);
printf("%s\n", buf);
charset_r(width, pos+1, buf);
}
p++;
}
}
int main(void)
{
int i;
for(i=0;i<=WIDTH;i++)
charset_r(i,0,"");
}
我的问题是双重的:
- 我应该在 VHDL 中使用递归吗?
- 如果没有,我该如何解决这个问题?
更新:
因此,最终目标是合成代码并将值输出到时钟端口。据我了解,通过阅读评论递归可能是深度 2 之外的一个坏主意,因此最好以其他方式解决它,而不使用递归。
由于除了递归之外,我无法以任何其他方式思考这个问题(似乎无法弄清楚),任何指针或建议(甚至代码!)将不胜感激。