首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归- Java编程

递归- Java编程
EN

Stack Overflow用户
提问于 2017-11-22 11:28:18
回答 3查看 110关注 0票数 1

我一直在试图弄清楚为什么产量是321,而不是123。我试过好几次,看过讲稿,但是我仍然找不到解决这个问题的办法。

代码语言:javascript
复制
public static void main(String[] args) {
     printNumber(1);
}

public static void printNumber(int n) {
    if(n!=4) {
         printNumber(n + 1);
         System.out.print(n);
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-22 11:39:06

每个对printNumber的调用都首先调用printNumber(n+1),然后打印出一些内容。所以printNumber(n+1)printNumber(n)打印出它的号码之前就已经完成了。

代码语言:javascript
复制
main():
   printNumber(1):
       printNumber(2):
           printNumber(3):
               printNumber(4) // does nothing
               print(n) // "3"
               // printNumber(3) completes, returning control to printNumber(2)
           print(n) // "2"
           // printNumber(2) completes, returning control to printNumber(1)
       print(n) // "1"
       // printNumber(1) completes, returning control to main()
   // main() completes
票数 7
EN

Stack Overflow用户

发布于 2017-11-22 11:39:21

变量n为12或3。

你先打印什么,n还是n + 1?您先打印n + 1,然后打印n。因此,数字必须以相反的顺序出现。

票数 1
EN

Stack Overflow用户

发布于 2017-11-22 12:06:14

这个结果的原因是,您将递归调用语句printNumber(n + 1)放在System.out.print(n)打印语句之前,因此它将一直递归地调用它,直到它到达4之后,它将打印从最后一次调用n+1n的数字,就像我们从31的例子一样。

试试这个:

代码语言:javascript
复制
public static void printNumber(int n) {
    if(n!=4) {
         System.out.print(n);
         printNumber(n + 1);
    }
}

您将发现输出:123

原因是在每次递归调用时,它都会打印数字n,然后再次调用n+1,直到到达4为止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47433563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档