Python递归函数不递归

2024-03-29 13:03:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试解决一个难题,就是对代码进行反向工程,得到一个可能的密码列表,从中应该有一个“突出”并且应该有效的密码

function checkPass(password) {
    var total = 0;
    var charlist = "abcdefghijklmnopqrstuvwxyz";
    for (var i = 0; i < password.length; i++) {
        var countone = password.charAt(i);
        var counttwo = (charlist.indexOf(countone));
        counttwo++;
        total *= 17;
        total += counttwo;
    }
    if (total == 248410397744610) {
        //success//
    } else {...

我用python写了一些我认为应该行得通的东西,我逆向工程了它的加法和乘法的顺序,让它尝试每个字符,看看它是否正确地被分成一个偶数。在

^{pr2}$

但当我试着运行它时

deisx

Process finished with exit code 0

我想知道为什么我的函数不能正确地递归,因为从我看来它应该递归。试着自己运行,看看会发生什么。在

这个谜题应该有多种解决方案(我想?),我计划让它能够重复,直到它得到所有的解,但我有点迷茫,为什么它只在每个字母中运行一次,然后就死了。在

编辑: 修改了代码以实际递归,但现在没有输出,仍然以退出代码0结束。

编辑2: 再次修改


Tags: 代码编辑密码列表varfunctionpassword工程
1条回答
网友
1楼 · 发布于 2024-03-29 13:03:58

代码既不重复也不递归,因为:

  1. runlist函数只调用一次
  2. runlist函数不适合递归模式,即:
    • 检查处理结束条件,如果满足则返回最终结果
    • 否则返回到目前为止的结果加上打电话给你自己
网友
2楼 · 发布于 2024-03-29 13:03:58

恐怕我对python不太了解,但我可能可以帮助您掌握算法。在

编码过程重复以下操作:

  • 将当前总数乘以17
  • 将下一个字母的值(a=1,b=2,…,z=26)加到 总计

所以在任何时候,总数是17的倍数加上最后一个字母的值。所以递归求解器中的每一步都必须去掉最后一个字母,然后将结果除以17。在

但是,由于乘法器是17,字母表中有26个字符,一些剩余值可能由多个字母产生——这是许多密码可能产生相同解决方案的地方。在

例如:

  • 编码“a”的总数为1,1%17=1
  • 编码“r”得到的总数是18,18%17=1

因此,如果当前余数是1,那么编码的字母可能是“a”或“r”。我认为在你的解决方案中,你只寻找第一种情况,而忽略了第二种情况。在

在伪代码中,我用来解决这个问题的函数如下所示:

function decodePassword(total, password)
    if total == 0
        print password
        return
    end if

    var rem = total / 17       # integer division - truncate
    var char1 = total % 17     # potential first character
    var char2 = char1 + 17     # potential second character

    # char1 values 1-16 map to letters a-p
    if char1 >= 1
        decodePassword(rem, charlist.charAt(char1 - 1) + password)
    end if

    # char2 values 17-26 map to letters q-z
    if rem > 0 && char2 <= 26
        decodePassword(rem - 1, charlist.charAt(char2 - 1) + password)
    end if

end function

如果有帮助的话,你要找的答案是12个字符长,可能无法在这个论坛上打印!在

高温

相关问题 更多 >