首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这个递归函数是如何得到这个输出的?

这个递归函数是如何得到这个输出的?
EN

Stack Overflow用户
提问于 2016-01-11 15:59:46
回答 6查看 108关注 0票数 1

当我为n=5运行这段代码时,我得到的输出是"5 3 1 1 3 5“,我得到了5 3 1部分,但在那之后,n=-1,但是当我使用调试器运行代码时,当n=-1时,它会转到numbers(n-2);i.e System.out.prt(n+ "");之后的行,即使该语句包含在if块中。

这一切为什么要发生?

代码语言:javascript
运行
复制
public void numbers(int n)
{
    if(n>0)
    {
        System.out.print(n+" ");
        numbers(n-2);
        System.out.print(n+" ");
    }
}

TLDR :当n=-1 System.out.prt(n+ "");时,即使它在if块中,它只在n>0时运行。

任何帮助都将不胜感激。提前感谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-01-11 16:05:28

下面是幕后发生的事情,对于n == 5

代码语言:javascript
运行
复制
numbers(5);
    if(5 > 0)--> true : 
        System.out.print(5 + " "); // (1)
        numbers(3);
        |   if(3 > 0)--> true : 
        |       System.out.print(3 + " "); // (2)
        |       numbers(1);
        |       |   if(1 > 0)--> true : 
        |       |       System.out.print(1 + " "); // (3)
        |       |       numbers(-1);
        |       |       System.out.print(1 + " "); // (4)
        |       System.out.print(3 + " "); // (5)
        System.out.print(5 + " "); // (6)

注意每个数字应该如何被打印两次:

代码语言:javascript
运行
复制
System.out.print(n + " "); // print once
numbers(n-2);
System.out.print(n + " "); // print twice
票数 1
EN

Stack Overflow用户

发布于 2016-01-11 16:03:06

删除最后的System.out.print(n+“");在递归数字调用之后,它返回n的原始值,并再次打印这个值。

它从最深的层次返回,打印1次,直到第3次的调用,再次打印,同时5也被再次打印。

如果希望它在第一次打印后更新该值,则必须执行n-=2而不是n-2来更新变量n。

票数 1
EN

Stack Overflow用户

发布于 2016-01-11 16:06:05

代码语言:javascript
运行
复制
    5 first system.out then number(5-2)
    |
    ----> 3  first system.out then number(5-2)
          |
           ----->1 first system.out then number(5-2)
                 (smaller than 0) , returning
                 |
                 1 second system.out
                 |
           3<----  second system.out
           |
5<---------  second system.out
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34725881

复制
相关文章

相似问题

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