Java 不理解递归回溯

Java 不理解递归回溯,java,Java,我知道这是一个模糊的问题,但我在学院完成了数据结构课程,仍然不明白递归回溯是如何工作的。我不理解递归的魔力,很难写出递归回溯算法。比如说,我在这里给出了一个递归回溯模板的示例: void findSolutions(n, other params) { if (found a solution) { solutionsFound++; displaySolution(); if (solutionsFound >= solutionTarget)

我知道这是一个模糊的问题,但我在学院完成了数据结构课程,仍然不明白递归回溯是如何工作的。我不理解递归的魔力,很难写出递归回溯算法。比如说,我在这里给出了一个递归回溯模板的示例:

void findSolutions(n, other params) {
    if (found a solution) {
       solutionsFound++;
       displaySolution();
    if (solutionsFound >= solutionTarget) {
       System.exit(0);
       return;
      }
   }
    for (val = first to last) {
       if (isValid(val, n)) {
           applyValue(val, n);
           findSolutions(n + 1, other params);
           removeValue(val, n);
        }
    }
} 
我不明白这到底是怎么回事。我有点厌倦了有人告诉我,我必须相信这是真的。我真的很想深入解释递归是如何工作的,以及如何编写它。 我相信递归是一个重要的概念,在技术面试中需要理解,我真的希望能够在需要解决这些问题时编写代码。任何解释这一点的提示以及查看和研究的好资源都将不胜感激。

简单的递归示例

假设您需要一个方法sumn,该方法将数字从0求和到n

使用简单的for循环,非常容易理解:

私有静态整型{ 整数和=0;
对于int i=0,我建议您阅读本文,这将有助于您更好地理解它。如果您真的不理解递归,那么这个问题太广泛了。如果您不理解的只是回溯:这只是对解决方案的深度优先搜索…每个方法调用代表组装完整解决方案的一个步骤。顺便说一句:System、 退出;返回;是一个很好的笑话