`
stinge
  • 浏览: 153710 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

递归法

阅读更多

递归:一个过程直接或间接的调用自己

 

注意:

  (1) 递归就是在过程或函数里调用自身;

  (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

 

 递归算法一般用于解决三类问题:

 

      (1) 数据的定义是按递归定义的。(Fibonacci函数)

  (2) 问题解法按递归算法实现。(回溯)

  (3) 数据的结构形式是按递归定义的。(树的遍历,图的搜索)

 

  递归的缺点:

  递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。

 

     递归设计:

      (1)对原问题S进行分析,假设出合理的叫嚣的问题S1;

      (2)假设S1是可解的,再此基础上确定S的解,即给出S与S1的关系;

      (3)确定一个特定的可解情况,作为递归的出口。

 

   递归向非递归转换:

      (1)直接转换法:可以直接求值,不需要回溯,使用中间变量来保存中间结果

      (2)间接转换法:使用 来保存中间结果。

 

//阶乘,递归
public static int jiecheng(int n){
	if(n > 1){
		return jiecheng(n-1) * n;
	}else{
		return 1;
	}
}
//阶乘,非递归
public static int jiecheng1(int n){
	int s = 1;
	for(int i = 1; i <=n; i++){
	s = s*i; 	
	}
	return s;
}
 
//汉诺塔问题
public static void hanoi(int n, char a, char b, char c){
	//结束条件,剩最后一个
	if(n == 1){
		//当剩最后一个时,将a上的盘移动到c上
		move(a,1,c);
	}else{
		/*将n-1个从a移到b上,然后将最后一个移动到c上,
		再以a为空柱,将b上的n-1个移动到c上
		*/
		hanoi(n-1,a,c,b);
		move(a,n,c);
		hanoi(n-1,b,a,c);
	}
}
public static void move(char a, int n, char c){
	System.out.println("从"+a+"移动到"+c);
}
 

 

 

分享到:
评论

相关推荐

    学习常用算法之(5)递归法

    在编程和算法设计中,递归法是一种强大的思想,它基于解决问题时将大问题分解为相同或相似的小问题,直到小问题足够简单可以直接求解。递归法常常用于解决那些可以自包含的问题,即问题的解决方案能直接或间接地包含...

    递归法求N的阶乘

    本示例聚焦于使用C语言实现递归法来计算一个整数N的阶乘(Factorial)。阶乘是一个数学概念,表示从1乘到指定正整数n的所有自然数的积,记作n!。例如,5的阶乘表示为5! = 5 × 4 × 3 × 2 × 1 = 120。 在C语言中...

    c++代码用递归法求最大公约数

    这个是用递归法来写最大公约数,当然原算法还是欧几里得算法;只不过代码比较简洁

    递归法将整数转换为字符串.zip

    本篇文章将深入探讨如何使用递归法在C语言中将整数转换为字符串。 首先,我们需要理解递归的基本概念。递归是一种解决问题的方法,它通过调用自身来解决更小规模的子问题,直到达到基本情况,从而解决整个问题。在...

    用递归法解决商人渡河问题

    商人渡河问题的递归法解决方案 商人渡河问题是一个经典的逻辑题,问题的描述是:有三个商人,三个强盗,和一条船(船每次只可以载小于等于两个人),他们同在河的一边,想渡过河去,但是必须保证在河的任何一边必须...

    易语言递归法取排列组合例程

    本例程通过递归法实现了在易语言中获取排列组合的方法,这在处理大量数据或需要进行各种可能性计算的问题时非常有用。 递归法是解决此类问题的经典策略,它通过将问题分解成更小的子问题来解决。在排列组合问题中,...

    Python程序_利用递归法和pygame实现迷宫寻路的动态展示

    本项目"Python程序_利用递归法和pygame实现迷宫寻路的动态展示"结合了递归法这一重要的算法思想和pygame库来创建一个可视化、交互式的迷宫解决方案。 首先,我们要理解递归法。递归是一种解决问题的方法,它通过...

    算法设计文档(含回溯法 递归法 贪心算法 背包...)

    算法设计文档涵盖了多种重要的算法,包括回溯法、递归法、贪心算法以及背包问题,这些都是在计算机科学和软件工程中广泛使用的解决问题的方法。 **回溯法**是一种试探性的解决问题方法,常用于在大量可能解中寻找...

    最近点对的暴力法和递归法实现(图形界面)

    本项目提供了两种不同的解决方案:暴力法和递归法,并且结合了图形界面,使得用户可以直观地观察算法的运行过程。 1. **暴力法**: 暴力法是最直观的解决策略,也被称为“平方根分解”或“双循环”方法。其基本...

    递归法写阶乘

    ### 递归法写阶乘 #### 知识点概览 1. **递归的基本概念** 2. **阶乘的定义与计算** 3. **递归实现阶乘的原理** 4. **C++中的递归函数编写** 5. **递归函数的调用过程分析** 6. **递归函数的优化** 7. **递归与...

    递归法读取数据库树型结构示例

    本文将深入探讨如何利用递归法在数据库中读取并构建树型结构,以及在应用程序中如何展示这些数据。 首先,让我们理解什么是递归法。递归是一种编程技术,它通过调用自身来解决问题或执行任务。在处理树型结构时,...

    递归法取排列组合易语言源码例程.rar

    递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合...

    2_crop5rp_求和_递归法_

    标题“2_crop5rp_求和_递归法_”暗示了我们正在探讨一个与编程相关的主题,特别是关于计算阶乘的问题,其中“crop5rp”可能是项目或代码的特定标识符,而“求和”可能是一个误导性的标签,因为实际问题主要涉及递归...

    用递归法计算从n个正整数中选择k个数的不同组合数

    递归法是一种解决问题的有效策略,特别适用于处理这种具有自相似性质的问题,如计算组合数。 首先,我们需要了解组合数的基本公式,也被称为“二项式系数”或“杨辉三角”的元素。对于给定的n和k,组合数C(n, k)...

    易语言源码递归法取排列组合易语言源码例程.rar

    易语言源码递归法取排列组合易语言源码例程.rar 易语言源码递归法取排列组合易语言源码例程.rar 易语言源码递归法取排列组合易语言源码例程.rar 易语言源码递归法取排列组合易语言源码例程.rar 易语言源码递归法...

    算法设计与优化第六章递归法经典例题(如最大值,母牛繁殖,x的n次幂等共5个)

    在IT领域,尤其是在编程和算法设计中,递归法是一种重要的解决问题的方法。递归法基于函数或过程调用自身来解决复杂问题,通常用于简化逻辑并处理分而治之的问题。本主题涵盖了5个使用C语言编写的递归法经典例题,...

    VS C++递归法读XML

    递归法是处理这种结构的理想选择,因为它可以自然地反映出XML的层次关系。 在C++中使用CMarkup库,我们需要先包含库头文件`cmarkup.h`,然后创建一个CMarkup对象,用它来加载XML文件。例如: ```cpp #include ...

    递归法画迷宫

    标题中的“递归法画迷宫”指的是使用编程技术,特别是递归算法来生成迷宫图形的方法。在计算机科学中,迷宫生成是一种常见的问题,递归法是一种有效且直观的解决方案。递归通常涉及将大问题分解为更小的子问题,直到...

Global site tag (gtag.js) - Google Analytics