• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

数据结构笔记总结(4.5)递归算法的调试

极客笔记 Geekerstar 11个月前 (05-13) 597次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

递归算法的调试

上一小节我们学习了递归实现的底层机理,这一小节我们来学习一下递归算法的调试。

其实这个方法也没有什么特别之处,就是打印输出,通过打印输出能清楚的看出我们程序是怎样一步一步获得最终结果的。

当然还有另外一种调试方式就是单步跟踪。

这一节我们还是使用LeetCode的那个题来演示,最终会在我们控制台上输出整个递归调用过程。

对于递归函数来说有一个非常重要的概念叫递归深度,也就是说每个程序调用自己,就可以说递归深度多了1。

递归深度是一个非常重要的概念,它可以帮我们理解递归的变量,我们添加一个函数叫depth代表递归深度,初始调用递归深度为0,具体演示代码如下:

public class Solution {

    public ListNode removeElements(ListNode head, int val, int depth) {

        String depthString = generateDepthString(depth);

        System.out.print(depthString);
        System.out.println("Call: remove " + val + " in " + head);

        if(head == null){
            System.out.print(depthString);
            System.out.println("Return: " + head);
            return head;
        }

        ListNode res = removeElements(head.next, val, depth + 1);
        System.out.print(depthString);
        System.out.println("After remove " + val + ": " + res);

        ListNode ret;
        if(head.val == val)
            ret = res;
        else{
            head.next = res;
            ret = head;
        }
        System.out.print(depthString);
        System.out.println("Return: " + ret);

        return ret;
    }

    private String generateDepthString(int depth){
        StringBuilder res = new StringBuilder();
        for(int i = 0 ; i < depth ; i ++)
            res.append("--");
        return res.toString();
    }

    public static void main(String[] args) {

        int[] nums = {1, 2, 6, 3, 4, 5, 6};
        ListNode head = new ListNode(nums);
        System.out.println(head);

        ListNode res = (new Solution()).removeElements(head, 6, 0);
        System.out.println(res);
    }

}

运行一下程序,分析结果

如图所示,首先打印的是“-”,这个“-”越长,就相当于递归调用深度越高,同样多的“-”代表同一深度。

源码下载

下载地址

导航目录

查看导航
丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:数据结构笔记总结(4.5)递归算法的调试
喜欢 (0)
[247507792@qq.com]
分享 (0)
Geekerstar
关于作者:
本站技术支持

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00