我正在做家庭作业,我已经筋疲力尽了。我是编程新手,这是我的第一堂编程课。
这就是问题:
考虑 Collatz.java 中的以下递归函数,它与数论中一个著名的未解决问题(称为 Collatz 问题或 3n + 1 问题)相关。
public static void collatz(int n) {
StdOut.print(n + " ");
if (n == 1) return;
if (n % 2 == 0) collatz(n / 2);
else collatz(3*n + 1);}
例如,调用 collatz(7) 会打印序列
7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
17 次递归调用的结果。编写一个程序,该程序采用命令行参数 N 并返回 n
我尝试了几件事:使用 for 循环,尝试使用每次执行方法时递增的变量来计算执行次数,以及数小时的苦差事。
显然,我应该以某种方式使用数组来进行记忆。但是,我不明白当必须在启动时指定数组的长度时如何使用数组。
我做错了什么吗?我误解了这个问题吗?
到目前为止,这是我的代码。它反映了尝试创建整数数组的尝试:
public class Collatz2 {
public static int collatz2(int n)
{
StdOut.print(n + " ");
if (n==1) {return 1;}
else if (n==2) {return 1;}
else if (n%2==0) {return collatz2(n/2);}
else {return collatz2(3*n+1);}
}
public static void main(String[] args)
{
int N = Integer.parseInt(args[0]);
StdOut.println(collatz2(N));
}
}
EDIT:
我写了一个单独的程序
public class Count {
public static void main(String[] args) {
int count = 0;
while (!StdIn.isEmpty()) {
int value = StdIn.readInt();
count++;
}
StdOut.println("count is " + count);
}
}
然后我使用了管道: %java Collatz2 6 | java 计数
而且效果很好。