zoukankan      html  css  js  c++  java
  • DS:chap06递归

    chap06、递归 (157/364)

    1、课前秀

    • 自已调用自已,直接递归
    • 间接递归

    2、递归设计方法

    2.1、递归模型

    • f(1)=1 :递归的终止条件(递归出口)
    • f(n)=n*f(n-1) n > 1:递归体,给出了f(n)的值与f(n-1)的值之间的关系。

    2.2、递归的执行过程

    • 把“大问题”分解为求解过程和环境都相似的“小问题”。

    2.3、递归设计

    • (1)对原问题f(s)进行分析,假设出合理的“较小问题”f(s');
    • (2)假设f(s')是可解的,在此基础上确定f(s)的解,即给出f(s)与f(s')之间的关系;
    • (3)确定一个特定情况(如f(1)或f(0))的解,由此作为递归出口。

    2.4、递归到非递归的转换

    • 直接求值,不需要回溯,使用中间变量保存中间结果,称为直接转换法

      • 题目:
        f(1)=1
        f(2)=1
        f(n)=f(n-1)+f(n-2) n>2
        
      • int f(int n)
        {
            int i,s;
            s1 = 1;//s1用于保存f(n-1)的值
            s2 = 1;//s2用于保存f(n-2)的值
            s = 1;
            for(i=3;i<=n;i++)
            {
                s = s1+s2;
                s2 = s1;
                s1 = s;
            }
            return (s);
        }
        
      • NULL

    • 不能直接求值,需要回溯,使用栈保存中间结果,称为间接转换法

      • //伪算法过程
        将初始状态s0进栈
        while(栈不为空)
        {
            退栈,将栈顶元素赋给s
            if(s是要找的结果)
                返回
            else
            {
                寻找到s的相关状态s1
                将s1进栈
            }
        }
        
      • //非递归方法计算一棵二叉树的所有结点个数
        #define n 100
        typedef struct node
        {
            char data;
            struct node *left,*right;
        }bltree;
        
        int counter(bltree *t)
        {
            bltree *st[n],*p;
            int top,count = 0;
            if(t!=NULL)
            {
                top = 1;
                stack[top] = t;//将根结点入栈
                while(top > 0)
                {
                    count++;//结点计数器增1
                    node = stack[top];//将栈顶结点退栈并赋给node
                    top--;
                    if(node->left != NULL)
                    {
                        top++;
                        stack[top]=node->left;
                    }
                    if(node->right != NULL)
                    {
                        top++;
                        stack[top]=node->right;
                    }
                }
            }
            return (count);
        }
        
      • NULL

    ReadMe

    • 20200623看了《李春葆:数据结构习题与解析》电子版,自已的实体书还没看呢。
      • 基本能理解,但习题还没做,不知道自考真题有没有相关。
      • 递归到非递归的转换要好好理解一下,代码还没有run呢。
  • 相关阅读:
    Java xml 操作(Dom4J修改xml   + xPath技术  + SAX解析 + XML约束)
    Git 命令 操作
    vim常用快捷键
    离线数据分析流程介绍
    WebPack 简单使用
    React Native之React速学教程(下)
    puppet 部署 horizon server 所需的参数和部署逻辑
    jsp出现getOutputStream() has already been called for this response异常的原因和解决方法
    12款优秀的 JavaScript 日历和时间选择控件
    mysql 去重
  • 原文地址:https://www.cnblogs.com/fewolflion/p/13184057.html
Copyright © 2011-2022 走看看