递归:一个过程直接或间接的调用自己
注意:
(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);
}
分享到:
相关推荐
在编程和算法设计中,递归法是一种强大的思想,它基于解决问题时将大问题分解为相同或相似的小问题,直到小问题足够简单可以直接求解。递归法常常用于解决那些可以自包含的问题,即问题的解决方案能直接或间接地包含...
本示例聚焦于使用C语言实现递归法来计算一个整数N的阶乘(Factorial)。阶乘是一个数学概念,表示从1乘到指定正整数n的所有自然数的积,记作n!。例如,5的阶乘表示为5! = 5 × 4 × 3 × 2 × 1 = 120。 在C语言中...
这个是用递归法来写最大公约数,当然原算法还是欧几里得算法;只不过代码比较简洁
本篇文章将深入探讨如何使用递归法在C语言中将整数转换为字符串。 首先,我们需要理解递归的基本概念。递归是一种解决问题的方法,它通过调用自身来解决更小规模的子问题,直到达到基本情况,从而解决整个问题。在...
商人渡河问题的递归法解决方案 商人渡河问题是一个经典的逻辑题,问题的描述是:有三个商人,三个强盗,和一条船(船每次只可以载小于等于两个人),他们同在河的一边,想渡过河去,但是必须保证在河的任何一边必须...
本例程通过递归法实现了在易语言中获取排列组合的方法,这在处理大量数据或需要进行各种可能性计算的问题时非常有用。 递归法是解决此类问题的经典策略,它通过将问题分解成更小的子问题来解决。在排列组合问题中,...
本项目"Python程序_利用递归法和pygame实现迷宫寻路的动态展示"结合了递归法这一重要的算法思想和pygame库来创建一个可视化、交互式的迷宫解决方案。 首先,我们要理解递归法。递归是一种解决问题的方法,它通过...
算法设计文档涵盖了多种重要的算法,包括回溯法、递归法、贪心算法以及背包问题,这些都是在计算机科学和软件工程中广泛使用的解决问题的方法。 **回溯法**是一种试探性的解决问题方法,常用于在大量可能解中寻找...
本项目提供了两种不同的解决方案:暴力法和递归法,并且结合了图形界面,使得用户可以直观地观察算法的运行过程。 1. **暴力法**: 暴力法是最直观的解决策略,也被称为“平方根分解”或“双循环”方法。其基本...
### 递归法写阶乘 #### 知识点概览 1. **递归的基本概念** 2. **阶乘的定义与计算** 3. **递归实现阶乘的原理** 4. **C++中的递归函数编写** 5. **递归函数的调用过程分析** 6. **递归函数的优化** 7. **递归与...
本文将深入探讨如何利用递归法在数据库中读取并构建树型结构,以及在应用程序中如何展示这些数据。 首先,让我们理解什么是递归法。递归是一种编程技术,它通过调用自身来解决问题或执行任务。在处理树型结构时,...
递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合...
标题“2_crop5rp_求和_递归法_”暗示了我们正在探讨一个与编程相关的主题,特别是关于计算阶乘的问题,其中“crop5rp”可能是项目或代码的特定标识符,而“求和”可能是一个误导性的标签,因为实际问题主要涉及递归...
递归法是一种解决问题的有效策略,特别适用于处理这种具有自相似性质的问题,如计算组合数。 首先,我们需要了解组合数的基本公式,也被称为“二项式系数”或“杨辉三角”的元素。对于给定的n和k,组合数C(n, k)...
易语言源码递归法取排列组合易语言源码例程.rar 易语言源码递归法取排列组合易语言源码例程.rar 易语言源码递归法取排列组合易语言源码例程.rar 易语言源码递归法取排列组合易语言源码例程.rar 易语言源码递归法...
在IT领域,尤其是在编程和算法设计中,递归法是一种重要的解决问题的方法。递归法基于函数或过程调用自身来解决复杂问题,通常用于简化逻辑并处理分而治之的问题。本主题涵盖了5个使用C语言编写的递归法经典例题,...
递归法是处理这种结构的理想选择,因为它可以自然地反映出XML的层次关系。 在C++中使用CMarkup库,我们需要先包含库头文件`cmarkup.h`,然后创建一个CMarkup对象,用它来加载XML文件。例如: ```cpp #include ...
标题中的“递归法画迷宫”指的是使用编程技术,特别是递归算法来生成迷宫图形的方法。在计算机科学中,迷宫生成是一种常见的问题,递归法是一种有效且直观的解决方案。递归通常涉及将大问题分解为更小的子问题,直到...