GTZ

递归:函数调用自己。(可终止)

格式:if(是基本情况吗)

               直接求解,并返回结果

          else(是另一种基本情况吗)

               直接求解,并返回结果

               递归情况

        else

              返回(进行某些处理步骤,然后是针对更小规模问题的函数递归调用)

递归与迭代:当一个问题很明显可以分解为类似或相同的更小的小问题,同时有终止条件时,采用递归。而迭代的终止条件是迭代条件被证明不正确,同时迭代可以无限循环,不需要额外的空间。

可以用递归解决的问题模型:斐波那契数列;阶乘;合并排序;快速排序;二分搜索;树的遍历及树的其他问题;图的遍历;动态规划;分治算法;汉诺塔问题;回溯;

:给出一个数组,判断该数组是否是单调递增序列

:int isArrayInSortedOrder(int A[],int n){

             if(n==1)

                 return 1;

            return (A[n-1]<=A[n-2]?0:isArrayInSortedOrder(A,n-1);

回溯算法举例:二进制串;生成的k进制串;背包问题;广义字符串;哈密尔顿回路;图着色问题;

:求生成的所有长度为n的二进制串,假设A[0...n-1]是一个大小为n的一维数组。

:void Binary(int n){

               if(n<1)

                   printf("%s",A);

               else{

                  A[n-1]=0;

                  Binary(n-1);

                 A[n-1]=1;

                  Binary(n-1);

      }

}

 

posted on 2020-02-08 00:01  GTZ  阅读(191)  评论(0)    收藏  举报