美文网首页
递归用法

递归用法

作者: zhulichao | 来源:发表于2020-07-23 09:19 被阅读0次

前段时间有个刚学编程的人找我做了几道编程题,都用到了递归,让我写个使用递归的总结,我个人用到的递归不多,就这几道编程题总结如下,后期如有新的体会再补充。

适用点

想一下规模为n的问题是否可以经过计算换算成规模为n-1的问题,如阶乘计算,n!=n*(n-1)!,这时就可以用递归。使用递归主要是代码写起来比较方便,大多数情况使用栈和循环都可以替代使用递归。

注意点

写递归算法时,要最先思考边界值,就是递归算法在什么情况下不应该再递归下去,如对于阶乘问题的n为1、0的时候,防止出现死循环。

优化点

用递归算法去解决问题,经常会比较耗性能,因为进行了大量循环,多进行一次递归可能会进行很多次循环,所以控制在哪些条件下无需递归很容易优化性能,如递归求最短路径时,如果当前递归处理的路径长度已经超过了当前最短路径的长度,那就不用再向下递归了。还要会利用数据结构,比如Map能够快速取值,如果是数组取值时需要进行遍历,尽量减少循环的次数。

调试点

递归问题最大的难点可能就在调试上了,因为进行了很多循环,无法跟进每一个循环去看当前的值对不对。这时一定要将问题范围缩小,比如题目要求100个点,可以先拿10个以内的点去调试,这时可以通过断点调试跟进每一次循环,看到所有变量当前的值,这样就容易看出问题出在哪了。如果有问题的标准答案,还要会利用答案,如果解题需要大量循环无法跟进时,可以写一个if条件在满足正确答案时进行输出,也可以在这里打个断点,看看为什么没有获得这个标准的答案,这时比较容易看出问题。

以上都是我做那几个题时的思路和方法,以前我也就写过一两次递归,其实没什么经验,大多数方法都是以前调程序的经验。如果打算深入的往编程这方面发展,有如下建议:

1、要进行编程练习,就像递归,完全自己手动去解决两三个问题也就会用了,也有调试的经验了;
2、一定要会分析问题,拆分问题,这个问题分几步,每一步都做什么,这样比较容易写出程序,容易调试,容易定位问题出在哪步了,其它地方就不用看了,也方便解决问题,问题细化后就容易描述小问题了,可以上网找找现成的例子;
3、一定要会分析现象,现在程序运行的结果不对,是什么样的现象,这个现象表明什么本质,切记不要直接一遍一遍的看代码,找哪里不对,这样很难找到问题的,如果你知道这样写有问题,那当时也就不会这样写了,一定要仔细思考、分析现象,找到问题本质,然后定位有问题的代码范围,再看代码。

相关文章

  • 递归用法

    前段时间有个刚学编程的人找我做了几道编程题,都用到了递归,让我写个使用递归的总结,我个人用到的递归不多,就这几道编...

  • 递归组件—树形结构效果

    递归组件treeMenu : 使用用法: 效果图:

  • 递归函数

    1.递归函数概述及用法 一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数 的递归...

  • MySQL

    mysql递归查询组织机构mysql 递归查询 MySQL教程之concat以及group_concat的用法 M...

  • ACM Cantoring Along

    AC代码: 递归的思路,注意!!void函数的用法。错误代码:

  • android日志超长打印 无bug代码

    网上是用递归写的,会导致出现oom,我用这个while写了一个。 存在bug的递归写法 完整用法 这里用了2种截断...

  • 2019-02-18 vue组件基础篇6

    组件高级用法递归组件 组件在它的模板内可以递归地调用自己,只要给组件设置name的选项就可以了。设置name后,在...

  • 2018-06-06 requestAnimationFrame

    requestAnimationFrame 这个需要记录下,不然每次都要反应半天。运用思路:自递归 用法1:不需要...

  • JS递归的常见用法

    递归的概念 在程序中函数直接或间接调用自己直接调用自己间接调用自己 跳出结构,有了跳出才有结果 递归的思想 递归的...

  • Bash Shell技巧用法总结

    一、ls 用法 1.列出所有一级目录 ls -l | grep "^d" 2.递归的列出所有目录 ls -lR |...

网友评论

      本文标题:递归用法

      本文链接:https://www.haomeiwen.com/subject/zvqfhktx.html