递归与回溯

时间:2020-02-08 11:58:17   收藏:0   阅读:53

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

格式: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);

      }

}

 

原文:https://www.cnblogs.com/gtz-gdufs/p/10660289.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!