如何记忆java中的方法_使用java中的递归方法进行记忆

我正在做家庭作业,我已经筋疲力尽了.我是编程新手,这是我的第一个编程课.

这就是问题:

考虑Collat​​z.java中的以下递归函数,它与数论中一个着名的未解决问题有关,称为Collat​​z问题或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);}

例如,调用collat​​z(7)打印序列

7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

作为17个递归调用的结果.编写一个采用命令行参数N的程序,并返回n< N为collat​​z(n)的递归调用次数最大化的N.提示:使用memoization.未解决的问题是没有人知道函数是否终止n的所有正值(数学归纳没有帮助,因为其中一个递归调用是参数的较大值). 我尝试过几个方面:使用for循环,尝试计算每次执行方法时变量递增的执行次数,以及数小时的苦差事. 显然,我应该以某种方式使用数组与memoization.但是,我不明白在启动时必须指定数组的长度时如何使用数组. 我做错了什么吗?我误解了这个问题吗? 到目前为止,这是我的代码.它反映了尝试创建整数数组的尝试:

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));

}

}

编辑:

我写了一个单独的程序

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 Collat​​z2 6 | java计数

它运作得很好.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值