小白的数据结构与算法学习笔记(十五)----递归算法

一、递归与迭代的区别

简单来说,递归使用的是选择结构,迭代使用的是循环结构。

递归就是自己调用自己,事先不知道要调用多少次或难以知道调用多少次;迭代就是事先已知循环多少次,直接循环。

递归让程序结构更加清晰,简洁,容易理解,但会消耗大量时间与内存,迭代无需。

递归函数分为调用和回退阶段,回退顺序就是调用顺序的逆序!!!

递归一定需要一个结束条件,使其不再调用自身而开始回调!!否则将陷入无限制的循环中。

二、递归的应用

1、斐波那契数列:兔子繁殖问题

int Fib(int i)

{

       if(i==0)return 0;

       else if(i==1)return 1;

       else return Fib(n-1)+Fib(n-2);

}

2、折半查找(key为已经从小到大排好序的数列)

int search(int key[],int low,int high,int k)

          int mid;

          if(low>high)return -1;

          else

         {

                  mid=(low+high)/2;

                 if(key[mid]==k)return mid;

                 if(key[mid]>k)return search(key,low,mid-1,k);

                if(key[mid]<k)return search(key,mid+1,high,k);

         }

}

3、汉诺塔

void move(int n,char x,char y,char z)

{

        if(n==1)printf("%c--->%c\n",x,z);

        else

        {

                move(n-1,x,z,y);

                printf("%c--->%c\n",x,z);

                move(n-1,y,x,z);

        }

}

                                                                                                                                         BY  ZJQ

猜你喜欢

转载自blog.csdn.net/qq_41641805/article/details/81565095