jjzjj

recursion

全部标签

java - 在 Java 中实现递归

需要说明的是,这不是家庭作业,我在业余时间学习CS!我最近买了一本查尔斯·菲利普斯(CharlesPhillips)的书,书名是《逻辑思维的50个谜题》。我启动了其中一个,然后我想到我可以使用递归来解决问题。这是(转述的)问题:Insertamathematicaloperator(+,-,÷,x)ineachofthespacestosolvetheequation:6_3_5_7_4_8=13据我了解,为了使用递归解决这个问题,我首先需要确定一个基本案例。但是,我在执行此操作时遇到了问题。所以我的问题是,什么是可能的基本案例,我应该如何开始实现它?递归函数可能是什么样子(参数、返回

java - 内存管理递归Java

我正在使用大型ArrayList在Java中输入递归。在一个递归步骤中,我将这个列表分成两个列表,每个列表大小减半,并对两个列表递归地应用相同的方法。但是,由于拆分后我不再需要大列表,因此我想将其从内存中删除。在这里搜索了一段时间后,我想到了这个:publicsome_objectrecursiveMethod(ArrayListlarge_List){//ComputethetwosublistsArrayListlower_half=lowerHalf(large_List);ArrayListupper_half=upperHalf(large_List);//Deletelar

java - 递归对象到 JSON

假设我有以下代码:publicclassA{Bb;publicA(){this.b=newB(this);}}publicclassB{Aa;B(Aa){this.a=a;}}如您所见,这些对象(A和B)相互引用,如果您尝试将对象转换为JSON代码,则会导致无限递归:A有B,它和A一样,A也有B,等等,等等。但如果我尝试将这些对象转换为JSON,例如使用Gson,则会引发StackOverflowError,这是由于递归(顺便说一下,这是完全合乎逻辑的)。现在有没有一种方法可以在JSON中声明这样的递归?如果没有,那么有没有办法在JSON中处理这种递归?或者我是否必须手动检查递归、删除

java - 将 Array 划分为 2 个子数组并检查乘法是否相等

我正在练习Java考试。我今天面临的问题之一是:给定一个包含n个数字的数组,我需要检查是否有2个子数组(不必相等)它们的乘积等于-如果有,则返回true,否则返回false。例如:如果数组是:{2,15,3,4,2,5}-将返回True如果数组是:{2,4,6,2,3,4}-将返回False。答案必须是递归的,没有任何循环。所以我想,如果有2个子数组,它们的乘积相等,这意味着整个数组的总乘数必须是一个平方根数。例如,在第一个数组中,它是3600,即60。到目前为止,我还没有找到它不适用的任何情况,但仍然不能100%确定它是否涵盖所有可能的情况。这是我的代码:publicstaticbo

java - 生成一定长度的所有排列

假设我们有一个字母“abcdefghiklimnop”。我怎样才能以一种有效的方式递归地生成排列,以五组为一组重复这个字母表?这几天我一直在为这个问题苦苦挣扎。任何反馈都会有所帮助。本质上这与:Generatingallpermutationsofagivenstring相同但是,我只想要整个字符串长度为5的排列。我一直无法弄清楚这一点。因此,对于“abcdefghiklimnop”的所有长度为5的子串,找到子串的排列。例如,如果子字符串是abcdef,我会想要它的所有排列,或者如果子字符串是defli,我会想要该子字符串的所有排列。下面的代码给了我一个字符串的所有排列,但我想用它来查

java - 根据子值填充父 List 元素

考虑以下代码:类AuditProgressReport:publicclassAuditProgressReport{privateListaudit_progress_reports=null;privateStringname=null;privateStringdescription=null;privateintcompliant;privateintnon_compliant;privateintnot_completed;/****/publicAuditProgressReport(){super();}publicAuditProgressReport(Stringna

java - 如何使用 LoadingCache 将递归转换为迭代?

我完全重写了这个问题,因为原来的问题无法解决。为了简单起见,我使用斐波那契数列作为玩具示例。trivialrecursivecachedcomputation正如预期的那样,以非常长的堆栈跟踪结束。这就是为什么我想要一个像IterativeLoadingCache这样的抽象类,我可以扩展为here通过类似的东西@OverrideprotectedIntegercomputeNonRecursivelly(Integerkey){finalIntegerx1=getOrEnqueue(key-1);finalIntegerx2=getOrEnqueue(key-2);if(x1==nul

java - Java 中的递归是如何工作的?

这个问题在这里已经有了答案:Understandinghowrecursivefunctionswork(18个答案)关闭7年前。请解释以下代码中递归语句的工作原理。intfactR(intn){intresult;if(n==1)return1;result=factR(n-1)*n;returnresult;}我的理解是:在上面的语句中,factR(n-1)方法调用自身直到结束。假设我们想要获得6的阶乘,它将作为参数发送到此方法。它将作为参数n接收,然后检查n的值;如果它是1那么1将被返回。但如果它不是1,就像在我们的例子中它是6,那么递归语句将运行。现在我面临的问题是,第一次n-

java - 递归地找到二叉搜索树中每个节点的总深度?

我已经解决这个问题一段时间了,但我不太明白其中的逻辑。假设我有一个如下所示的二叉树:81*0=0/\4122*1=2/\/\2610144*2=8----10我想找到每个节点的深度并将这些数字加在一起得到总数。我现在得到的代码看起来像这样:privateinttotalDepth(Nodenode,intdepth){if(node==null){return0;}returntotalDepth(node.left,depth+1)+totalDepth(node.right,depth+1);}我认为这会在遍历树的右侧之前递归地向树左侧的每个更深的级别添加一个(8->4->2),但

java - 平衡二叉搜索树

好的,我正在尝试让二叉搜索树达到平衡,我知道它为什么不起作用,但我不知道如何修复它。这就是我的平衡方法。publicvoidbalance(){if(isEmpty()){System.out.println("EmptyTree");return;}if(!isEmpty()){values=newObject[count()];index=0;createAscendingArray(root);clear();balanceRecursive(0,index);values=null;}}privatevoidcreateAscendingArray(TreeNodecurren