Gab*_* H. 1 c iteration algorithm recursion loops
我刚开始使用递归编程 - 因为我已经听说这对于解决问题有多么强大,我想尝试一下我几天前写的一个简单的解密算法.
我知道可能很难弄清楚每次迭代正在做什么,但递归会使这个循环更"优雅"和"算法"吗?
for (int e = 0; e < length; e++)
{
for (int d = 0; d < length; d++)
{
for (int c = 0; c < length; c++)
{
for (int b = 0; b < length; b++)
{
for (int a = 1; a < length; a++)
{
key[0] = letters[a];
key[1] = letters[b];
key[2] = letters[c];
key[3] = letters[d];
key[4] = letters[e];
if (strcmp(crypt(key, salt), hash) == 0)
{
printf("%s\n", key);
return 0;
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果你可以在没有递归的情况下完成任务,那么以这种方式解决它是一个好主意.如果您想了解递归,请查看像factorial或Fibonacci这样的问题.这些也有迭代解决方案,但更多的是递归,而不是你在这里的问题.在这种情况下,很清楚你的算法在做什么,递归会让它变得更加难以理解.但是,您可以进行一项改进
for (int e = 0; e < length; e++)
{
key[4] = letters[e];
for (int d = 0; d < length; d++)
{
key[3] = letters[d];
for (int c = 0; c < length; c++)
{
key[2] = letters[c];
for (int b = 0; b < length; b++)
{
key[1] = letters[b];
for (int a = 1; a < length; a++)
{
key[0] = letters[a];
if (strcmp(crypt(key, salt), hash) == 0)
{
printf("%s\n", key);
return 0;
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)