Collatz函数无法正确退出

超步

这是一个旨在递归计算Collat​​z序列长度的程序:

def odd_collatz ( n ):
    return (3 * n) + 1

def even_collatz ( n ):
    return int(n / 2)

def collatz_counter ( initialNumber, initialLength ):
    length = initialLength

    while True:
        if initialNumber == 1:
            return length

        elif initialNumber != 1:
            length += 1

            if initialNumber % 2 == 0:
                 collatz_counter(even_collatz(initialNumber), length)

            else:
                collatz_counter(odd_collatz(initialNumber), length)

print(collatz_counter(13, 1)

预期的答案应该是10。但是,程序陷入了无限循环。在序列的第二到最后一步initalNumber等于2。程序按预期运行:collatz_counter使用even_collatz和数字10进行调用

下一步的行动预计将运行collatz_counterinitialNumber1和initialLength10.我期望会发生的是,第一个if语句将评估为真,collatz_counter应该返回length,然后退出。但是,这不会发生什么:

实际发生的情况是该函数计算第一个if语句,运行该return length行,然后跳转到下面的代码行,if initialNumber % 2...并且整个过程在无限循环中一遍又一遍地重复。

关于为什么会发生这种情况的任何想法?

qfwfq

您正在以某种奇怪的方式混合递归和循环。问题是while True:因为您从不从循环内返回任何东西,所以没有什么可以阻止它永远持续下去。您的代码达到1,然后继续增加长度。这是固定版本。

def odd_collatz ( n ):
    return (3 * n) + 1

def even_collatz ( n ):
    return int(n / 2)

def collatz_counter ( initialNumber, initialLength ):
    length = initialLength


    if initialNumber == 1:
        return length

    elif initialNumber != 1:
        length += 1

        if initialNumber % 2 == 0:
            return collatz_counter(even_collatz(initialNumber), length)

        else:
            return collatz_counter(odd_collatz(initialNumber), length)

print(collatz_counter(13, 1))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Collatz函数无法正确退出

来自分类Dev

python无法正确退出程序

来自分类Dev

无法正确退出bash脚本

来自分类Dev

返回语句未以正确的值退出函数

来自分类Dev

节点轮询器无法正确退出

来自分类Dev

内含nohup的脚本无法正确退出

来自分类Dev

退出时Firefox无法正确关闭

来自分类Dev

退出时Firefox无法正确关闭

来自分类Dev

macrodef无法正确传达退出状态

来自分类Dev

无法捕获 ctrl-c 以退出函数退出 bash 脚本

来自分类Dev

jQuery函数无法正确执行

来自分类Dev

无法正确设置构造函数

来自分类Dev

无法正确使用Excel函数

来自分类Dev

处理承诺拒绝以使函数退出的正确方法是什么?

来自分类Dev

Collatz链递归函数C

来自分类Dev

Collatz链递归函数C

来自分类Dev

无法正确键入函数返回函数

来自分类Dev

当软件无法正确安装时,脚本如何退出?

来自分类Dev

无法使用 Firebase 在 Android 上正确退出 Facebook

来自分类Dev

jQuery .when函数何时无法正确等待?

来自分类Dev

COLNAMES函数无法读取正确的标签

来自分类Dev

哈希在函数之间无法正确传递

来自分类Dev

MVC Razor @helper函数无法正确递归?

来自分类Dev

简单函数无法正确传递变量

来自分类Dev

lambda函数无法显示正确的结果

来自分类Dev

Typescript tapAsync函数无法设置正确的键入

来自分类Dev

C函数无法返回正确的数组大小

来自分类Dev

Chrome无法正确识别函数参数

来自分类Dev

无法从MySQL LIKE函数获得正确答案