打印
[应用相关]

十张GIFs让你弄懂递归等概念

[复制链接]
614|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

[color=rgba(0, 0, 0, 0.870588)]图像(包括动图)是传递信息的一种高效方式,往往能增强表象、**与思维等方面的反应强度。所谓一图胜千言,说的就是这个道理。

[color=rgba(0, 0, 0, 0.870588)]今天为大家整理了十张动图GIFS,有助于认识循环、递归、二分检索等概念的具体运行情况。代码实例以Python语言编写。

一、循环

[color=rgba(0, 0, 0, 0.870588)]GIF 1:最简单的 while 循环

[color=rgba(0, 0, 0, 0.870588)]

[color=rgba(0, 0, 0, 0.870588)]GIF 2:带 if/else 的循环

[color=rgba(0, 0, 0, 0.870588)]

二、递归

[color=rgba(0, 0, 0, 0.870588)]GIF 3:递归概念的直接演示

[color=rgba(0, 0, 0, 0.870588)]

[color=rgba(0, 0, 0, 0.870588)]GIF 4:递归的代码示例

[color=rgba(0, 0, 0, 0.870588)]

[color=rgba(0, 0, 0, 0.870588)]GIF 5:递归求斐波那契数列

[color=rgba(0, 0, 0, 0.870588)]

[color=rgba(0, 0, 0, 0.870588)]GIF 6:递归求阶乘(图里缩进有点问题,请忽略吧)



沙发
734774645|  楼主 | 2016-9-23 21:52 | 只看该作者
三、按值传递和按引用传递

[color=rgba(0, 0, 0, 0.870588)]GIF 7:按值传递和按引用传递的区别

[color=rgba(0, 0, 0, 0.870588)]

四、线性检索和二分检索

[color=rgba(0, 0, 0, 0.870588)]GIF 8:线性检索和二分检索求 23 的位置

[color=rgba(0, 0, 0, 0.870588)]

[color=rgba(0, 0, 0, 0.870588)]GIF 9:线性检索和二分检索求 1 的位置

[color=rgba(0, 0, 0, 0.870588)]

[color=rgba(0, 0, 0, 0.870588)]GIF 10:二分检索树

[color=rgba(0, 0, 0, 0.870588)]


使用特权

评论回复
板凳
天灵灵地灵灵| | 2019-6-20 21:22 | 只看该作者
给力, 怎么做的

使用特权

评论回复
地板
戈卫东| | 2019-6-21 09:56 | 只看该作者
有点意思。
不错不错。

使用特权

评论回复
5
goodluck09876| | 2019-6-21 16:26 | 只看该作者
二分检索树 比较厉害 这个是一个什么模型啊?

使用特权

评论回复
6
goodluck09876| | 2019-6-21 16:35 | 只看该作者
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
float *p,*q;
//float p[5]={-1,3,3,1,1};
//float q[5]={2,3,1,1,1};
float **c,**w;
int **R;
int n;
//int n=4;
char *a[10];
//char a[4][10]={{'d','o'},{'i','f'},{'r','e','a','d'},{'w','h','i','l','e'}};
typedef struct BiTNode{
        int num;
        BiTNode* Lc;
        BiTNode* Rc;
        }BiTNode, *BiTree;
        


//录入标识符集和成功检索概率以及不成功检索概率
void input()
{
     int i;
     printf("请输入字符个数:");
     scanf("%d",&n);
     p=(float *)malloc(sizeof(float)*(n+1));
     q=(float *)malloc(sizeof(float)*(n+1));
     
     printf("请键入字符集:\n");
     for(i=0;i<n;i++)
     {
             printf("a[%d]=",i);
             a[i]=(char *)malloc(sizeof(char)*10);
             scanf("%s",a[i]);
     }
   
     p[0]=-1;
     for(i=1;i<=n;i++)//输入各字符检索成功的概率
     {
             printf("p[%d]=",i);           
             scanf("%f",&p[i]);
     }   
   
     for(i=0;i<=n;i++) //输入检索不成功的概率   
     {
             printf("q[%d]=",i);           
             scanf("%f",&q[i]);  
     }
}
      
void OBST( )
{

     c=(float **)malloc(sizeof(float)*(n+1));
     w=(float **)malloc(sizeof(float)*(n+1));
     R=(int **)malloc(sizeof(int)*(n+1));     
     int i,j,m,k,l;
     float tmp,tmp1;
     for(i=0;i<=n;i++)
     {
           c[i]=(float *)malloc(sizeof(float)*(n+1));
           memset(c[i],0,sizeof(float)*(n+1));
           w[i]=(float *)malloc(sizeof(float)*(n+1));
           memset(w[i],0,sizeof(float)*(n+1));
           R[i]=(int *)malloc(sizeof(int)*(n+1));
           memset(R[i],0,sizeof(int)*(n+1));
     }
     for(i=0;i<n;i++)
     {
           w[i][i]=q[i];
           c[i][i]=0;
           R[i][i]=0;
           w[i][i+1]=q[i+1]+p[i+1]+q[i];
           R[i][i+1]=i+1;
           c[i][i+1]=q[i+1]+p[i+1]+q[i];
     }
     w[n][n]=q[n];
     R[n][n]=0;
     c[n][n]=0;
     for(m=1;m<=n;m++)
     {//找有m个结点的最优树
         for(i=0;i<=n-m;i++)
         {
             j=i+m;
             w[i][j]=w[i][j-1]+q[j]+p[j];            
             tmp=c[i][i]+c[i+1][j];
             k=i+1;
             //printf("%d %d\n",R[i][j-1],R[i+1][j]);
             for(l=i+2;l<=j;l++)
             {
                  tmp1=c[i][l-1]+c[l][j];
                  if(tmp1<tmp)
                  {  
                     tmp=tmp1;
                     k=l;
                  }
             }         
             c[i][j]=w[i][j]+c[i][k-1]+c[k][j];
             R[i][j]=k;
             //printf("c[%d][%d]=%.0f R[%d][%d]=%d\t",i,j,c[i][j],i,j,R[i][j]);
         }  
        // printf("\n");
     }
}
BiTree buildtree(int i,int j)
{
       if(i>=j)
          return NULL;
       BiTree Tr;
       Tr=(BiTree)malloc(sizeof(BiTNode));
       //memset(Tr,0,sizeof(BiTNode));
       if(!Tr)
          return NULL;
       Tr->num=R[i][j];
       Tr->Lc=buildtree(i,R[i][j]-1);
       Tr->Rc=buildtree(R[i][j],j);
       return Tr;
}
void preTree(BiTree T)//先序并输出
{
     if(T)
     {
        printf("%s ",a[T->num-1]);
        //printf(" %d ",T->num);
        preTree(T->Lc);
        preTree(T->Rc);  
     }
}
void midTree(BiTree T)//中序并输出
{
        if(T!=NULL)
        {
            midTree(T->Lc);
            printf("%s ",a[T->num-1]);
            midTree(T->Rc);
        }
}
int main(int argc, char *argv[])
{

   BiTree BT;
   input();
   OBST();
   printf("c[0][%d]=%.2f,R[0][%d]=%d\n",n,c[0][n],n,R[0][n]);
   BT=buildtree(0,n);
   printf("先序:");
   preTree(BT);
   printf("\n");
   printf("中序:");
   midTree(BT);
   printf("\n");  
  system("PAUSE");       
  return 0;
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

197

主题

3451

帖子

14

粉丝