zoukankan      html  css  js  c++  java
  • 记忆化搜索思想浅谈

    记忆化搜索

    第一步:搞清递归

    递归函数的执行流程分为两个阶段:递归前进段、递归返回段。

    这可以说一个很神奇的东西。总的来说就是:递归前进段就是你按它函数的顺序执行下去,直到碰到边界;递归返回段就是当你碰到了边界,你把刚刚所有递归嵌套的函数值算出来,一步一步返回值,返回给最初的值。

    这里有一个我很容易搞错的东西,也很难理解的东西:每递归调用一次函数,系统就会生成一个新的函数实例。这些函数实例有同名的参数和局部变量,但各自独立,互不干扰。流程执行到哪一层,那一层的变量就起作用,返回上一层,就释放掉低层的同名变量。这个需要深刻理解一下。

    递归构建有三个条件:1)参数;2)边界;3)范围。

    据此来分析递归过程如何写。

    1 参数:明确参数的意义以及当前的值;

    2 边界:一个递归函数一定要有边界,而且边界一定要考虑全面,不能漏,否则它就可能死循环;

    3 范围:就是你在递归时的选择往哪儿走,也就是说,你的递归调用的函数返回值。

    记忆化搜索:

    ① 定义好一个数组,用来存储递归所求出来的值;②在主程序里,memset一下,一般都是赋初值为-1,然后把这个数组的边界值设置好;③在递归函数里,首先加一句:if (这个数组的值>=0) return 这个值【如果赋初值为-1的话,一般都是>=0】;其次,在后面的递归调用中,先给这个数组赋值,再return

     

    NOIP2018 rp++
  • 相关阅读:
    !!!最常用正则表达式语法
    RunMessageScript from spy
    已知进程、线程、窗体三者中某一个的句柄,需要查找另外两者的句柄。
    如何抓取一个当前运行软件所使用的内存
    谢谢你的伤害
    游摸底河有感
    九月无诗
    游石人公园有感
    影响35岁前成功的好习惯与坏习惯
    创业经验十二谈,愿有志者共勉(转)
  • 原文地址:https://www.cnblogs.com/brilliant107/p/9471222.html
Copyright © 2011-2022 走看看