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

    记忆化搜索

    第一步:搞清递归

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

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

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

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

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

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

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

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

    记忆化搜索:

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

     

    NOIP2018 rp++
  • 相关阅读:
    【LeetCode OJ】Remove Element
    【LeetCode OJ】Remove Duplicates from Sorted Array
    【LeetCode OJ】Swap Nodes in Pairs
    【LeetCode OJ】Merge Two Sorted Lists
    【LeetCode OJ】Remove Nth Node From End of List
    【LeetCode OJ】Two Sum
    【LeetCode OJ】Majority Element
    最长公共子序列问题
    php fopen与file_get_contents的区别
    PHP 技巧集合
  • 原文地址:https://www.cnblogs.com/brilliant107/p/9471222.html
Copyright © 2011-2022 走看看