首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的递归循环两次打印相同的值?

为什么我的递归循环两次打印相同的值?
EN

Stack Overflow用户
提问于 2020-11-01 04:02:12
回答 4查看 83关注 0票数 1

下面的代码递归地将x减去1,直到它等于y。它打印一个表示递归过程的字符串。我不希望在字符串中打印x的起始值。

代码语言:javascript
运行
复制
private static String createPath(int x, int y, String path) {
        if (x > y) {
            path += "(" + (x-1) + "," + y + ") ";
            return createPath(x - 1, y, path);
        }
        else 
            return path += "(" + x + "," + y + ") ";
    }

当我输入如下内容时:

代码语言:javascript
运行
复制
System.out.println(createPath(5, 1, ""));

我得到以下输出:

代码语言:javascript
运行
复制
(4,1) (3,1) (2,1) (1,1) (1,1) 

为什么最后的值(1,1)被打印了两次?我注意到当我从(x-1)中删除(x-1)时

代码语言:javascript
运行
复制
path += "(" + (x-1) + "," + y + ") ";

输出变为:

代码语言:javascript
运行
复制
(5,1) (4,1) (3,1) (2,1) (1,1)

但同样,我不希望在字符串中打印(5,1)。此外,我也看过Why is my recursive loop printing the last value twice at the end?,但它似乎对我没有帮助。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-11-01 04:17:42

您的定义应如下所示:

代码语言:javascript
运行
复制
private static String createPath(int x, int y, String path) {
    if (x <= y) {
        return path;
    }
    path += "(" + (x - 1) + "," + y + ") ";
    return createPath(x - 1, y, path);
}

这个定义将确保只要返回x <= y,就会返回path的值。

票数 1
EN

Stack Overflow用户

发布于 2020-11-01 04:16:08

很简单,因为当x==2y==1条件x>y为true时,"(" + (x-1) + "," + y + ") "返回(1,1)

票数 1
EN

Stack Overflow用户

发布于 2020-11-01 04:20:26

正确的解决方案:

代码语言:javascript
运行
复制
    private static String createPath(int x, int y, String path) {
        if (x > (y + 1))
            return createPath(x - 1, y, path + "(" + (x - 1) + "," + y + ") ");
        else 
            return path + "(" + (x - 1) + "," + y + ") ";
    }

注意,else分支中的if (x > (y + 1))(x - 1)

函数的执行顺序如下:

代码语言:javascript
运行
复制
createPath(5, 1) => createPath(4, 1, "(4,1)");
createPath(4, 1) => createPath(3, 1, "(3,1)");
createPath(3, 1) => createPath(2, 1, "(2,1)");
createPath(2, 1) => createPath(1, 1, "(1,1)");
// and the last one in the else branch
createPath(1, 1) => createPath(1, 1, "(1,1)");

正如您所看到的,您需要在else分支中添加(x - 1),并修改if语句,以便更早地到达else分支,以防止它低于1。

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

https://stackoverflow.com/questions/64625881

复制
相关文章

相似问题

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