首页 > 解决方案 > 递归问题 - 意外输出

问题描述

public class recursion {
    void printMessage() {
        System.out.println("Yo!");
    }
    // x = 1, y = 1
    void add (int x, int y) {
    if (x<4) {
            int sum = x + y;
            System.out.println(sum);
            add(sum,x);
            printMessage();
        }
    }
}

输出

2
3
5
Yo!
Yo!
Yo!

我不明白为什么该消息被打印了三遍?一旦 x 超过 3,不应该只调用一次打印消息函数吗?

标签: javaalgorithmrecursion

解决方案


每次调用此函数时,它都会打印“Yo!”。如果您只想打印一次,您应该像这样编辑它:

void add (int x, int y) {
    if (x<4) {
        int sum = x + y;
        System.out.println(sum);
        add(sum,x);
        return;
    }
    printMessage();
}

“return”会破坏函数,它不会继续你的代码(printMessage())。

希望这对您有所帮助。


推荐阅读