如何用递归替换循环

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)

Mit*_*lin 6

如果你可以在没有递归的情况下完成任务,那么以这种方式解决它是一个好主意.如果您想了解递归,请查看像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)