• 递归——习题


    1、什么是直接递归和间接递归

    直接递归:一个函数或过程调用了自身

    间接递归:过程或函数p调用过程或函数q,而过程或函数q又调用p。

    2、消除递归一般要用到什么数据结构

    栈数据结构

    3、分析程序的执行过程

    #include<stdio.h>
    void f(int n,int &m){
        if(n<1)return;
        else{
            printf("调用f(%d,%d)前,n=%d,m=%d
    ",n-1,m-1,n,m);
            n--;
            m--;
            f(n-1,m);
            printf("调用f(%d,%d)后,n=%d,m=%d
    ",n-1,m-1,n,m);
        }
    } 
    main(){
        int n=4,m=4;
        f(n,m);
    }

     

     4、某递归算法的执行时间T(n)有以下递归关系:

    T(1)=1
    
    T  (n)=T(n/3)+T(2n/3)+n   当n>1

     5、采用直接推导的方法求解以下递归问题:

     通过以上两个求时间复杂度的问题,可以看出对于有两个分支的表达式要用递归树来求解,一个分支的可以直接化简即可。

    6、不带头结点的单链表L,递归算法逆序输出:

    #include<stdio.h> 
    typedf struct Lnode{//存储结构 
    int date;
    struct Lnode *next;
    }Node;
    
    void disp(Node *L){
        if(L!=null)
        disp(L->next);
        printf("%d",L->date);
    }

    7、不带头结点的单链表L,递归算法删除第一个值为x的结点:

    void Del_X(LinkList &L,ElemType x)
    {
        LNode *p;
        if(L==NULL)
            return ;
        if(L->data==x)//找到了 
        {
            p=L;
            free(p);
    
        }else//没找到 
        {
            Del_X(L->next,x);
        }
    }

    8、假设二叉树采用二叉链存储结构,所有结点的值都不相同,设计递归算法求值为x的结点的层次(根结点层次为1):

    int Level(BTNode *bt,int h,int x) {//初始值 h=1 
        if(bt == NULL)
            return 0;
        if(bt->data == x )
            return h;
        else {
            int lh = Level(bt -> lchild,h+1 ,x);  // 在左子树中查找
            if(lh != 0)  // 在左子树中找到,返回其层次 
                return lh;
            else//在左子树没查找到 
                return Level(bt -> rchild, h+1 ,x);  // 返回在右子树的查找结果
        }
    }

    9、假设二叉树采用二叉链结构存放,设计递归算法由二叉树b复制产生二叉树t

    typedef struct node{
        int data;
        struct node *lchild,*rchild;
    }BTnode;
    
    BTnode copy(BTnode *b){
        Btnode *newnode;
        if(b==null)
        return null;
        else{
            newnode=(BTnode*)malloc(sizeof(BTnode));
            newnode->data=b->data;
            newnode->lchild=copy(b->lchild);
            newnode->rchild=copy(b->rchild);
            return newnode;
        }
    }
     
  • 相关阅读:
    Mysql数据库的一些操作
    【狂神说Java】JavaWeb入门到实战1---笔记
    图神经网络学习
    HWSX网址
    python如何判断两个数组完全相等?
    SQL-3-菜鸟教程
    SQL-2
    时间序列相似度分析算法
    pip install 安装不了怎么办?
    leetcode 3 无重复字符的最长子串
  • 原文地址:https://www.cnblogs.com/zhai1997/p/12056916.html
Copyright © 2020-2023  润新知