递归迭代:Collatz猜想(快速4)
本周,我被要求研究Collatz猜想,并编写一个函数,该函数确定达到给定输入达到1所需的步骤。Collatz猜想以20世纪初德国数学家Lothar Collatz命名。 猜想背后的主要思想是,对于任何给定的数字n (即12),如果给定的数字是偶数,则您将是该数字的一半。 如果是偶数,则继续将结果数减半。 如果不是(意味着,如果数字为奇数),则将奇数乘以3并加1。继续应用这两个运算( n * 2或3 n +1),直到n = 1。
为了显示:
如果是偶数,我将被2除。如果是奇数,我将被3乘以加1。我继续这样做直到得到数字1。
上面,我编号了到达1的步骤。它花费了9个步骤。
在下面,我将研究如何计算代码的步数(当然是Swift!)。 注意:有时我会像“ Colletz”那样拼写“ Collatz”,对不起!
当n = 12时,无需递归即可运行此功能花费了0.009045888秒。
当n = 12时,使用递归运行此函数在其上次迭代中花费了0.000402969秒。 请注意,在第一次调用中,它花费了0.008834584秒,这比我编写的没有递归的第一个函数要少。
我希望您喜欢使用DispatchTime,并将带有for循环的函数重构为具有递归的函数,从而对Collatz猜想有更多的了解。 请在下面享受一点Gosling / Culkin递归。
资源: