【问题标题】:What is the incrementation process in recursion? [closed]递归中的自增过程是什么? [关闭]
【发布时间】:2021-01-31 12:45:01
【问题描述】:

在处理练习题时,我遇到了这个问题,我不确定我是如何得到错误答案的。我尝试将“i”的值增加 1 并打印该值。这应该打印输出“5 6 7”,但由于某种原因没有。我尝试用谷歌搜索我的答案,但无法正确表达问题或获得良好结果。

//assuming that the value of 'i' is 4
public static void test(int i) {

if (i < 8) {
   test(i + 1);
   System.out.print (i  + “ “);
   }
}

【问题讨论】:

  • 这是一个练习题,所以我不应该更改代码。
  • @David 你传递的是哪个值?
  • 抱歉,我一直忘记这样做。
  • 你得到哪个输出? “7 6 5 4”如果您无法更改代码,那么我不确定我是否理解您真正期待的内容

标签: java recursion


【解决方案1】:

在打印值之前调用test。如果您最初使用5 调用test,机器会以伪代码执行此操作:

test(5)
test(5 + 1)
test(5 + 1 + 1)
test(5 + 1 + 1 + 1)
print 5 + 1 + 1 // 7
print 5 + 1 // 6
print 5

test 被调用;但在打印任何内容之前,它会再次使用i + 1 调用自身。如此重复直到i 为 8,然后它开始在“最里面”函数中打印。

您应该先打印,然后再拨打test

【讨论】:

    【解决方案2】:

    由于您在递归调用后打印i 的值,因此代码将等到递归函数返回后再打印该值。这会导致数字向后打印。

    为防止这种情况,您可能希望在进行递归调用之前调用 print 语句。

        public static void test(int i) {
            if (i < 8) {
                System.out.print (i  + "");
                test(i + 1);
            }
        }
    

    你可以用this anyfiddle测试一下

    【讨论】:

    • 谢谢,但这是一个练习题,所以我不能修改代码。无限递归是可能的。
    • 30 年编程经验提示:学习编程的最佳实践是更改代码。当然你可以改变你的代码并进行实验!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多