递归迭代:Collat​​z猜想(快速4)

本周,我被要求研究Collat​​z猜想,并编写一个函数,该函数确定达到给定输入达到1所需的步骤。Collat​​z猜想以20世纪初德国数学家Lothar Collat​​z命名。 猜想背后的主要思想是,对于任何给定的数字n (即12),如果给定的数字是偶数,则您将是该数字的一半。 如果是偶数,则继续将结果数减半。 如果不是(意味着,如果数字为奇数),则将奇数乘以3并加1。继续应用这两个运算( n * 2或3 n +1),直到n = 1。

为了显示:

如果是偶数,我将被2除。如果是奇数,我将被3乘以加1。我继续这样做直到得到数字1。

上面,我编号了到达1的步骤。它花费了9个步骤。

在下面,我将研究如何计算代码的步数(当然是Swift!)。 注意:有时我会像“ Colletz”那样拼写“ Collat​​z”,对不起!

n = 12时,无需递归即可运行此功能花费了0.009045888秒。

n = 12时,使用递归运行此函数在其上次迭代中花费了0.000402969秒。 请注意,在第一次调用中,它花费了0.008834584秒,这比我编写的没有递归的第一个函数要少。


我希望您喜欢使用DispatchTime,并将带有for循环的函数重构为具有递归的函数,从而对Collat​​z猜想有更多的了解。 请在下面享受一点Gosling / Culkin递归。

资源:

DispatchTime –调度| Apple开发人员文档

创建相对于系统时钟的时间,该时间自引导以来开始计时。

developer.apple.com

Interesting Posts