问题标签 [collatz]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 我正在尝试运行 Collatz 猜想序列以查看它是否始终以 1 结束,但我的号码卡在 999。这是为什么呢?
这是我的代码:
它一直工作到 999 年,它无限期地继续打印Got one! 999
,最终提高了Segmentation Fault: 22
. 我该如何解决?
java - Memoization with recursive method in java
I am working on a homework assignment, and I have completely exhausted myself. I'm new to programming, and this is my first programming class.
this is the problem:
Consider the following recursive function in Collatz.java, which is related to a famous unsolved problem in number theory, known as the Collatz problem or the 3n + 1 problem.
For example, a call to collatz(7) prints the sequence 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 as a consequence of 17 recursive calls. Write a program that takes a command-line argument N and returns the value of n < N for which the number of recursive calls for collatz(n) is maximized. Hint: use memoization. The unsolved problem is that no one knows whether the function terminates for all positive values of n (mathematical induction is no help because one of the recursive calls is for a larger value of the argument).
I have tried several things: using a for loop, trying to count the number of executions with a variable incremented each time the method executed, and hours of drudgery.
Apparently, I'm supposed to use an array somehow with the memoization. However, I don't understand how I could use an array when an array's length must be specified upon initiation.
Am I doing something completely wrong? Am I misreading the question?
Here is my code so far. It reflects an attempt at trying to create an integer array:
EDIT:
I wrote a separate program
I then used piping: %java Collatz2 6 | java Count
and it worked just fine.
c++ - 3n+1 答案给出错误答案
这是我对给出错误答案的 3n+1 问题的解决方案。自从过去 5 天以来,我已经在这个安静的环境中挣扎了很多次。请帮助我找出解决方案中的问题。我使用了尾递归,并且还存储了一张地图来跟踪 2 的幂,以便更快地找到答案。问题的链接是编程挑战 - 3n + 1 问题
c - collatz c代码逻辑错误
当我编译并运行代码时,我输入 8 作为“a”,控制台会自行崩溃。我正在使用开发者 c。对不起我糟糕的英语,但我希望我足够清楚。
memoization - 在 rust 中的多个函数调用中保持变量处于活动状态
我正在尝试在 rust 中记忆递归 collatz 序列函数,但是我需要记忆值的哈希图来保持其内容跨单独的函数调用。是否有一种优雅的方式可以在 rust 中执行此操作,或者我是否必须在 main 中声明 hashmap 并每次将其传递给函数?我相信每次调用该函数时,hashmap 都会被重新声明为空映射。这是我的代码:
附带说明一下,当我从 HashMap 中插入和拉出项目时,为什么需要添加所有的 & 和 *?我只是这样做是因为编译器抱怨并添加它们修复了它,但我不知道为什么。我不能只传递价值吗?谢谢。
c++ - 反向 Collatz 序列码不计算
使用 C++,我正在编写一个程序,该程序将从 1 开始获取前 n 个数字并输出它们各自的“路径计数”,这就是我所说的从数字到零所需的 Collatz 序列的迭代次数(请参阅有关 Collatz 猜想的Wikipedia 文章)。例如,路径编号 8 为 3,因为到达 1 需要 3 步(8:2 = 4;4:2 = 2;2:2 = 1)。
因此,我们有一个简单的功能:
然后我决定写一个它的反函数(称为 firstInstanceOf(n)),它将计算任何给定 pathNumber 的第一个实例,从 1 开始按升序排列。例如,firstInstanceOf(3) 将是 8,因为 8 是第一个从1升序排列的数字,其pathCount为3。我写的函数如下:
其中 s 是输入值,i 是每次递增 1 的变量。看起来很简单,代码编译时没有任何警告,但根本不会计算。我曾尝试将后一个函数重新格式化为 for 循环、无限循环等,但程序仍然会无限期地缓冲或输出虚假值。我觉得我错过了一些非常明显的东西?任何帮助表示赞赏。
python - 在 python 2.7 中使用递归和多个参数的 collatz 猜想
我需要使用递归为 collatz 猜想编写 python 代码,其中提示用户输入一个正整数,如果偶数乘以 3,则该数字除以 2,如果奇数则加 1,并且此序列一直持续到值等于一。我还必须提示用户选择如何显示序列,无论是标准的计算方式、反转方式还是回文方式(向前和向后,即 86324895159842368) 以下是我目前所拥有的。我计算序列本身没有问题,但我不确定如何实现第二个参数。每当我尝试将方向定义为 F、B 或 P 时,都会出现一堆错误。在我需要去的地方的任何帮助将不胜感激
python - 用于创建 collatz 图的长时间运行 python 脚本
我一直在尝试编写一个 python 脚本来绘制一个数字通过 collatz 猜想所需的迭代图。在这个例子中,我只使用了一个很小的范围(只有数字 1),但是这个脚本似乎一直在运行,即使运行了 10 分钟也不会产生图表。下面是代码。有什么建议吗?
perl - 试图预测未来的结果,collatz,Perl
我正在研究一个 collatz 序列。我目前有一个for循环。
然后我有一个简单的方法来计算循环的计数(完成理论需要很多次)。
我发现使用简单的理论可以更快地编写代码。
如果 n = 3,它将有这个序列 {3,10,5,16,8,4,2,1} [8] 如果 n = 6,它将有这个序列 {6,3,10,5,16 ,8,4,2,1} [9] 如果 n = 12,它将有这个序列 {12,6,3,10,5,16,8,4,2,1} [10]
所以我想保存 3 的结果,以便能够通过将 1 添加到计数等来计算 6 的结果。
我试图解决这个问题,我认为可以解决这个问题,但它实际上使我的程序需要多花 1 分钟才能完成,我现在有一个需要 1.49 秒而不是我以前的 30 秒的程序。
这就是我添加缓存的方式(可能是错误的)
以下是在for循环之外
然后我有这段代码位于 $i 行之后,for 循环中的第 4 行
我不想给我完整的答案,我只需要了解如何正确缓存而不会使代码变慢。
c - 为什么 < 比 != 快得多?
问题:考虑以下算法来生成数字序列。从整数 n 开始。如果 n 为偶数,则除以 2。如果 n 为奇数,则乘以 3 并加 1。使用新的 n 值重复此过程,当 n = 1 时终止。输入将由一系列整数对组成 i 和j,每行一对整数。所有整数都将小于 1,000,000 且大于 0。对于每对输入整数 i 和 j,按照它们在输入中出现的相同顺序输出 i、j,然后是介于 i 和包括 i 和j. 这三个数字应该用一个空格分隔,所有三个数字都在一行上,每行输入对应一行输出。
样本输入:
样本输出:
所以我写了这个:
它完全可以,但是当您更改while(in>1)
循环方法时,while(in!=1)
它会变得更慢。我的问题是为什么?!
时间
while(in>1)
:0.683 秒当它的时候
while(in!=1)
:我等了超过 5 分钟还没有发生任何事情:)输入:1 1000000
没有无限循环或其他东西,因为根本in
不能低于 1(因为它必须已经是 1)。
此致