草庐IT

RECURSION

全部标签

java - 在 Java 中使用递归的阶乘

我正在使用Java:TheCompleteReference一书学习Java。目前我正在研究递归主题。请注意:stackoverflow上有类似的问题。我搜索了他们,但我没有找到我的问题的解决方案。我对以下程序中的逻辑感到困惑。如果我运行下面的程序,它会产生正确的输出,但我不明白其中的逻辑。我没看懂下面这行的逻辑:result=fact(n-1)*n;据我所知,如果我们传递n=4的值,如下面的程序所示,然后,3*4存储在结果中,即12。再次调用fact(n-1)。然后n变为3。然后将2*3存储在结果中,替换之前的12。我想你明白我的困惑/困惑。谢谢。classCalculation{i

java - 为什么导致 StackOverflowError 的递归方法的调用次数在程序运行之间会有所不同?

这个问题在这里已经有了答案:WhyisthemaxrecursiondepthIcanreachnon-deterministic?(4个回答)关闭4年前。一个用于演示的简单类:publicclassMain{privatestaticintcounter=0;publicstaticvoidmain(String[]args){try{f();}catch(StackOverflowErrore){System.out.println(counter);}}privatestaticvoidf(){counter++;f();}}上面的程序我执行了5次,结果是:22025221171

java - 为什么导致 StackOverflowError 的递归方法的调用次数在程序运行之间会有所不同?

这个问题在这里已经有了答案:WhyisthemaxrecursiondepthIcanreachnon-deterministic?(4个回答)关闭4年前。一个用于演示的简单类:publicclassMain{privatestaticintcounter=0;publicstaticvoidmain(String[]args){try{f();}catch(StackOverflowErrore){System.out.println(counter);}}privatestaticvoidf(){counter++;f();}}上面的程序我执行了5次,结果是:22025221171

java - 如何预测递归方法的最大调用深度?

为了估计递归方法在给定内存量下可以实现的最大调用深度,计算在可能发生堆栈溢出错误之前使用的内存的(近似)公式是什么?编辑:很多人的回答是“它取决于”,这是合理的,所以让我们通过一个琐碎但具体的例子来删除一些变量:publicstaticintsumOneToN(intn){returnn很容易证明,在我的EclipseIDE中运行此代码会导致n的值低于1000(对我来说太低了)。是否可以在不执行的情况下估计此调用深度限制?编辑:我不禁想到Eclipse有一个固定的最大调用深度1000,因为我得到了998,但是有一个用于主,一个用于初始调用方法,总共制作1000。这是一个“太圆”的数字恕

java - 如何预测递归方法的最大调用深度?

为了估计递归方法在给定内存量下可以实现的最大调用深度,计算在可能发生堆栈溢出错误之前使用的内存的(近似)公式是什么?编辑:很多人的回答是“它取决于”,这是合理的,所以让我们通过一个琐碎但具体的例子来删除一些变量:publicstaticintsumOneToN(intn){returnn很容易证明,在我的EclipseIDE中运行此代码会导致n的值低于1000(对我来说太低了)。是否可以在不执行的情况下估计此调用深度限制?编辑:我不禁想到Eclipse有一个固定的最大调用深度1000,因为我得到了998,但是有一个用于主,一个用于初始调用方法,总共制作1000。这是一个“太圆”的数字恕

java - 使用 Java 8 实现递归 lambda 函数

Java8引入了lambda函数,我想实现像阶乘这样的东西:IntToDoubleFunctionfact=x->x==0?1:x*fact.applyAsDouble(x-1);编译返回error:variablefactmightnothavebeeninitialized如何引用函数本身。类是匿名的,但实例存在:它被称为fact。 最佳答案 我通常使用(一次性定义所有功能接口(interface))通用帮助类,它包装了功能接口(interface)类型的变量。这种方式解决了局部变量初始化的问题,让代码看起来更清晰。如果出现这个

java - 使用 Java 8 实现递归 lambda 函数

Java8引入了lambda函数,我想实现像阶乘这样的东西:IntToDoubleFunctionfact=x->x==0?1:x*fact.applyAsDouble(x-1);编译返回error:variablefactmightnothavebeeninitialized如何引用函数本身。类是匿名的,但实例存在:它被称为fact。 最佳答案 我通常使用(一次性定义所有功能接口(interface))通用帮助类,它包装了功能接口(interface)类型的变量。这种方式解决了局部变量初始化的问题,让代码看起来更清晰。如果出现这个

注释掉从未执行的代码时,Java 程序运行速度变慢

我在我的一个Java程序中观察到一些奇怪的行为。我试图尽可能地剥离代码,同时仍然能够复制行为。完整代码如下。publicclassStrangeBehaviour{staticbooleanrecursionFlag=true;publicstaticvoidmain(String[]args){longstartTime=System.nanoTime();for(inti=0;i我有两个函数,functionA()和functionB(),它们以递归方式相互调用。这两个函数都带有一个控制递归终止的recursionDepth参数。functionA()调用functionB()最多

注释掉从未执行的代码时,Java 程序运行速度变慢

我在我的一个Java程序中观察到一些奇怪的行为。我试图尽可能地剥离代码,同时仍然能够复制行为。完整代码如下。publicclassStrangeBehaviour{staticbooleanrecursionFlag=true;publicstaticvoidmain(String[]args){longstartTime=System.nanoTime();for(inti=0;i我有两个函数,functionA()和functionB(),它们以递归方式相互调用。这两个函数都带有一个控制递归终止的recursionDepth参数。functionA()调用functionB()最多

c++ - 提升 : is it safe to use multiple recursion in async calls?

我是asio框架的新手,所以请多多关照。我调查了几个boostasio示例,发现人们使用这样的异步调用:voidread(){async_read(socket_,boost::asio::buffer(&user_[0],user_.size()),boost::bind(&Connection::handle_user_read,this,placeholders::error,placeholders::bytes_transferred));}voidhandle_user_read(...){...read();...}我认为这段代码不安全,因为它使用了多重递归。所以当因为调