Java小白求解递归学不明白怎么办

递归好难,学不明白,该怎么办。现在就处于完全懵的状态。代码都看不明白更别说自己打了,整整一天才大概知道斐波那契代码怎么运行,但是还是不明白递归,也不会用,换一种方式用递归估计就不会了。在线求解……我该怎么办????????????

不用关心运行方式,只需要知道结果正确就行,比如斐波那契数列,定义就是前两个元素是1,后面每个元素都是它前面两个元素的和,这样就可以写出代码:

int f(int n)//第n项的值
{
    if(n<=2)
         return 1;
     return f(n-1)+f(n-2);
}

这不就是它的定义吗,你现在可以不用去关心执行过程,最后慢慢就明白了

《C和指针》对递归讲的挺详细,同时也写了这么句话:“阅读递归函数最容易的方法不是纠缠于它的执行过程,而是相信递归函数会顺利完成它的任务。如果每个步骤正确无误,限制条件设置正确,并且每次调用之后更接近限制条件,递归函数总是能够正确地完成任务。”

写之前先找规律,递归就是重复规律的运行,最后要设定一个结束条件,不然就会造成栈溢出

确定出口 避免栈溢出 递归其实不难

public class Demo5 {
    public static void main(String[] args) {
        // 递归计算5!
        int f = f(5);
        System.out.println(f);
    }
    public static int f(int n){
        if (n == 1){
            return 1;
        }
        return n*f(n-1);
    }
}
结果
120

递归说白了就是自己调用自己。这段代码不知能否看懂。方法f(n)在自己调用自己,如果不懂可以私信我。重点看return那里

递归确实很难,据说递归有压栈和出栈一说,楼主不妨先搞懂栈的相关概念和使用,然后再去了解递归的概念。而且建议多刷一些会用到递归解决问题的算法,那么久而久之就能明白了。比如你提到的斐波那契数,但是斐波那契数使用递归并不是最优解法,最优解法是 DP。但是对于二叉树的前后中序遍历,使用递归似乎更优雅。
一下代码楼主可以体会一下:根据values.add(); 的位置来了解递归的性质

public class RecursiveCalling{
       List<Integer> values = new ArrayList<>();
       // 前序遍历
       public void preorderTraversal (TreeNode root) {
            if(root == null) return;
            values.add(root.val); 
            preorderTraversal(root.left);
            preorderTraversal(root.right);
      }
       // 中序遍历
       public void inorderTraversal (TreeNode root) {
            if(root == null) return;
            inorderTraversal (root.left);
            values.add(root.val);  
            inorderTraversal (root.right);
      }

       // 后序遍历
       public void postorderTraversal (TreeNode root) {
            if(root == null) return;
            postorderTraversal (root.left);
            postorderTraversal (root.right);
            values.add(root.val);  
      }
}