`

算法之递归

 
阅读更多

                            递归与分治策略

 

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;
				
			}						
		}
	}

}
 
 
 

待续........

 

 

  • 大小: 6 KB
分享到:
评论
1 楼 henu_zhangyang 2016-07-15  
小伙子,代码都传到github上吧!  

相关推荐

    经典算法之递归

    标题“经典算法之递归”暗示我们将探讨使用递归解决一些经典的计算机科学算法。递归通常涉及两个主要部分:基本情况(Base Case)和递归情况(Recursive Case)。基本情况是问题最简单或最小的形式,可以直接求解,...

    数据结构与算法之递归

    数据结构与算法之递归,深入浅出,很深刻,很透彻。

    ACM基础算法之递归

    递归算法是ACM基础算法之一,通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数。许多教科书都把计算机阶乘和菲波那契数列用来说明递归,但是这些例子并没有提供任何优越之处。 本文通过一...

    .net 递归算法 .net 递归算法.net 递归算法

    在.NET编程环境中,递归算法是一种强大的工具,它允许函数或方法调用自身来解决复杂问题。递归的核心思想是将大问题分解为相同或相似的小问题,直到问题变得足够简单,可以直接得出答案。这种解决问题的方式在数据...

    5!递归算法和非递归算法

    递归算法和非递归算法 在计算机科学与编程领域中,递归算法与非递归算法是两种非常重要的计算方法。本文将详细介绍这两种算法的特点、应用场景以及如何实现它们,特别针对初学者及面试准备者。 #### 递归算法 ...

    18.递归算法与递归算法应用.ppt

    18.递归算法与递归算法应用.ppt

    牛顿迭代算法与递归算法的概念和区别

    在算法的世界里,牛顿迭代算法和递归算法各有千秋,它们是解决问题的两种重要思路。理解它们的概念和区别对于选择正确的工具来解决...理解并掌握这两种算法的特点,可以帮助我们在面对复杂问题时,快速找到解决之道。

    使用C++,请给出此题的递归算法及非递归算法。

    在编程领域,递归算法和非递归算法是两种常见的解决问题的方法。递归算法是通过函数或过程调用自身来解决复杂问题的方式,而非递归算法则是通过循环或其他逻辑结构来实现相同的目标。这里我们将详细探讨这两种算法在...

    数据结构和算法学习之递归

    在计算机科学中,数据结构和算法是编程的基础,而递归是解决复杂问题的重要方法之一。递归是一种在函数或程序中调用自身的技术,它通过简化问题来达到求解的目的。递归通常与分治策略相结合,将大问题分解为小的相似...

    算法分析 递归与分治策略 动态规划 贪心算法 分支限界法 随机化算法等算法

    在IT领域,算法是解决问题的核心工具,而递归与分治策略、动态规划、贪心算法、回溯法、分支限界法以及随机化算法都是其中的重要组成部分。这些算法不仅适用于计算机科学,也在数据结构、优化问题和复杂计算中扮演着...

    快速选择非递归与递归算法实现

    以上就是关于快速选择算法的非递归和递归实现的详细介绍。通过合理地选取基准和适当的数据结构,快速选择算法可以在大数据集上提供高效的k-th最小元素查找服务。在Java中的`QuickSelect.java`文件中,应该包含了这些...

    acm递归算法总结竞赛

    - **斐波那契数列**:经典的递归例子,第n个斐波那契数是前两个数之和,递归公式为F(n) = F(n-1) + F(n-2),基础情况是F(0)=0,F(1)=1。 - **阶乘计算**:n! = n * (n-1)!,基础情况是1! = 1。 5. **效率与栈空间...

    VC对磁盘文件遍历搜索的递归算法和非递归算法

    在VC++(Visual C++)环境中,有多种方法可以实现这一目标,其中最常见的是递归算法和非递归算法。这两种方法各有优缺点,适用于不同的场景。 **递归算法**: 递归算法是一种基于函数自身调用解决问题的方法。在...

    abap简单递归算法

    ### ABAP简单递归算法解析 #### 一、引言 ABAP(Advanced Business Application Programming)是一种用于SAP系统的编程语言。它不仅支持传统的过程化编程,还支持面向对象编程和Web开发。本文将深入探讨一个ABAP中...

    可并行递归算法的递归多线程实现

    ### 可并行递归算法的递归多线程实现:深入解析 #### 引言:多线程与并行处理的重要性 随着计算任务日益复杂,传统的单线程编程模型已无法满足高效处理大规模数据的需求。多线程编程作为一种提高程序并发性和性能...

    基础算法,递归思想算法,阶乘算法

    在IT领域,算法是解决问题的核心工具,而递归思想是其中一种重要的思维方式。本文将深入探讨基础算法、递归思想以及阶乘算法,同时我们还会看到如何使用C语言来实现这些概念。 首先,基础算法是计算机科学的基础,...

    5·5递归算法,递归思想

    递归算法是编程中一种非常重要的思想,尤其在Java这样的面向对象编程语言中,它的应用广泛且深入。递归的基本原理是将一个大问题分解为若干个相同或相似的小问题来解决,这些小问题同样可以用同样的方法去解决,直到...

    合并排序算法,快速排序算法,递归,分治

    合并排序算法、快速排序算法和递归分治是计算机科学中的基础概念,它们在数据处理和算法设计中占据着重要地位。以下是对这些知识点的详细解释: **合并排序算法(Merge Sort)** 合并排序是一种基于分治策略的排序...

    递归算法转为非递归算法

    递归算法转为非递归算法。方法、过程,用栈的原理

Global site tag (gtag.js) - Google Analytics