递归与分治策略
1、递归的总体思想:
对于一个大规模的问题无法直接求解,可以把这个大问题划分成k个小问题,如果小问题也无法求解时,继续划分,直到问题规模足够小,很容易求出解为止。然后把求出小规模问题的解合并为一个更大规模的问题的解,至底向上逐步求出原来问题的解。
2.分治思想:
将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便于各个击破,分而治之。
废话少说看实例
例1、阶乘函数
算法:
int fac(int x){ if(x==1){ return x; }else{ return fac(x-1)*x; } }
2、递归全排列问题:n个元素进行全排列。
设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。
设R={r1,r2,…,rn}是要进行排列的n个元素,Ri=R-{ri}。
集合X中元素的全排列记为perm(X)。
(ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀得到的排列。R的全排列可归纳定义如下:
当n=1时,perm(R)=(r),其中r是集合R中唯一的元素;
当n>1时,perm(R)由(r1)perm(R1),(r2)perm(R2),…,(rn)perm(Rn)构成。
public class Order { /** * 递归全排序 */ public static void main(String[] args) { int[] a={1,2,3}; pai(a,0,a.length); } public static void pai(int[] a,int start ,int end){ if(start ==end){ for(int i=0;i<end;i++){ //输出语句 System.out.print(a[i]); } System.out.println(); } else{ for(int j=start;j<end;j++){ int b=a[start]; a[start] =a[j]; //交换位置 a[j] =b; pai(a,start+1,end); b=a[start]; a[start] =a[j]; //返回到原来的样子 a[j] =b; } } } }
待续........
相关推荐
标题“经典算法之递归”暗示我们将探讨使用递归解决一些经典的计算机科学算法。递归通常涉及两个主要部分:基本情况(Base Case)和递归情况(Recursive Case)。基本情况是问题最简单或最小的形式,可以直接求解,...
数据结构与算法之递归,深入浅出,很深刻,很透彻。
递归算法是ACM基础算法之一,通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数。许多教科书都把计算机阶乘和菲波那契数列用来说明递归,但是这些例子并没有提供任何优越之处。 本文通过一...
在.NET编程环境中,递归算法是一种强大的工具,它允许函数或方法调用自身来解决复杂问题。递归的核心思想是将大问题分解为相同或相似的小问题,直到问题变得足够简单,可以直接得出答案。这种解决问题的方式在数据...
牛顿迭代算法与递归算法的概念和区别 牛顿迭代算法和递归算法是两种常用的算法思想,它们在解决问题时具有不同的特点和应用场景。 牛顿迭代算法是一种数值分析方法,用于寻找函数的零点或极值点。该算法的基本思想...
递归算法和非递归算法 在计算机科学与编程领域中,递归算法与非递归算法是两种非常重要的计算方法。本文将详细介绍这两种算法的特点、应用场景以及如何实现它们,特别针对初学者及面试准备者。 #### 递归算法 ...
18.递归算法与递归算法应用.ppt
在编程领域,递归算法和非递归算法是两种常见的解决问题的方法。递归算法是通过函数或过程调用自身来解决复杂问题的方式,而非递归算法则是通过循环或其他逻辑结构来实现相同的目标。这里我们将详细探讨这两种算法在...
在计算机科学中,数据结构和算法是编程的基础,而递归是解决复杂问题的重要方法之一。递归是一种在函数或程序中调用自身的技术,它通过简化问题来达到求解的目的。递归通常与分治策略相结合,将大问题分解为小的相似...
在IT领域,算法是解决问题的核心工具,而递归与分治策略、动态规划、贪心算法、回溯法、分支限界法以及随机化算法都是其中的重要组成部分。这些算法不仅适用于计算机科学,也在数据结构、优化问题和复杂计算中扮演着...
以上就是关于快速选择算法的非递归和递归实现的详细介绍。通过合理地选取基准和适当的数据结构,快速选择算法可以在大数据集上提供高效的k-th最小元素查找服务。在Java中的`QuickSelect.java`文件中,应该包含了这些...
- **斐波那契数列**:经典的递归例子,第n个斐波那契数是前两个数之和,递归公式为F(n) = F(n-1) + F(n-2),基础情况是F(0)=0,F(1)=1。 - **阶乘计算**:n! = n * (n-1)!,基础情况是1! = 1。 5. **效率与栈空间...
在VC++(Visual C++)环境中,有多种方法可以实现这一目标,其中最常见的是递归算法和非递归算法。这两种方法各有优缺点,适用于不同的场景。 **递归算法**: 递归算法是一种基于函数自身调用解决问题的方法。在...
### ABAP简单递归算法解析 #### 一、引言 ABAP(Advanced Business Application Programming)是一种用于SAP系统的编程语言。它不仅支持传统的过程化编程,还支持面向对象编程和Web开发。本文将深入探讨一个ABAP中...
### 可并行递归算法的递归多线程实现:深入解析 #### 引言:多线程与并行处理的重要性 随着计算任务日益复杂,传统的单线程编程模型已无法满足高效处理大规模数据的需求。多线程编程作为一种提高程序并发性和性能...
在IT领域,算法是解决问题的核心工具,而递归思想是其中一种重要的思维方式。本文将深入探讨基础算法、递归思想以及阶乘算法,同时我们还会看到如何使用C语言来实现这些概念。 首先,基础算法是计算机科学的基础,...
递归算法是编程中一种非常重要的思想,尤其在Java这样的面向对象编程语言中,它的应用广泛且深入。递归的基本原理是将一个大问题分解为若干个相同或相似的小问题来解决,这些小问题同样可以用同样的方法去解决,直到...
合并排序算法、快速排序算法和递归分治是计算机科学中的基础概念,它们在数据处理和算法设计中占据着重要地位。以下是对这些知识点的详细解释: **合并排序算法(Merge Sort)** 合并排序是一种基于分治策略的排序...
递归算法转为非递归算法。方法、过程,用栈的原理