当前位置:  开发笔记 > 编程语言 > 正文

项目欧拉(P14):递归问题

如何解决《项目欧拉(P14):递归问题》经验,为你挑选了1个好方法。

嗨我正在项目Euler中进行Collat​​z序列问题(问题14).我的代码适用于低于100000的数字,但是数字越大,我的堆栈溢出错误.

有没有办法可以重新计算代码以使用尾递归,或防止堆栈溢出.代码如下:

import java.util.*;

public class v4
{

   // use a HashMap to store computed number, and chain size 

   static HashMap hm = new HashMap();

   public static void main(String[] args)
   {

      hm.put(1, 1);

      final int CEILING_MAX=Integer.parseInt(args[0]);
      int len=1;
      int max_count=1;
      int max_seed=1;

      for(int i=2; i max_count)
          {
             max_count = len;
             max_seed = i;
          }
      }
      System.out.println(max_seed+"\t"+max_count);
   }

   // find the size of the hailstone sequence for N

   public static int seqCount(int n)
   {

      if(hm.get(n) != null)
      {
         return hm.get(n);
      }

      if(n ==1)
      {
         return 1;
      }
      else
      {
         int length = 1 + seqCount(nextSeq(n));
         hm.put(n, length);
         return length;
      }
   }

   // Find the next element in the sequence

   public static int nextSeq(int n)
   {

      if(n%2 == 0)
      {
         return n/2;
      }
      else
      {
         return n*3+1;
      }
   }

}

Jimmy.. 8

你的问题不是堆栈的大小(你已经记住了值),但是

    序列中某些数字的大小,和

    32位整数的上限.

暗示:

public static int seqCount(int n)
{
   if(hm.get(n) != null) {
       return hm.get(n);
   }
   if (n < 1) {
      // this should never happen, right? ;)
   } ...
   ...

这应该是足够的:)

PS你会在很多项目的euler问题中遇到对BigNums的需求......



1> Jimmy..:

你的问题不是堆栈的大小(你已经记住了值),但是

    序列中某些数字的大小,和

    32位整数的上限.

暗示:

public static int seqCount(int n)
{
   if(hm.get(n) != null) {
       return hm.get(n);
   }
   if (n < 1) {
      // this should never happen, right? ;)
   } ...
   ...

这应该是足够的:)

PS你会在很多项目的euler问题中遇到对BigNums的需求......


对于这个特殊问题,多头会这样做.(对于后来需要更长时间的那些,我使用Python而不是Java,因为它自动将整数提升为bignums)
推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有