什么是递归?
其实递归是一种算法的思想.也就是"自己"调用"自己",层层递归深入的一种编程思想.类似数学中的数学归纳法一样.从n开始n-1,n-2......2,1这个就到了函数的终点.所以递归函数必须得有以下几个条件.
1)自己调用自己;
2)递归函数必须要有"终点";
3)递归函数必须层层调用"逼近"终点;
使用递归,通常都和"树"有着密切的关联,把递归函数的调用关系画出来,其实就是一棵树.层层深入调用到达"终点",然后再从"终点"把结果层层的返回或者表现出来.
下面结合本人的工作经验给出了如下若干的递归函数的示例.
/**
* 递归函数
*/
import java.io.*;
public class Recursive {
public static void main(String[] args) {
File f = new File("E:/Java Application");
viewFile(f, 0);
System.out.println(fibonacci(3));
System.out.println(method(10));
System.out.println(isHuiWen("aba"));
}
// 打印指定文件夹下的所有文件
// 参数是文件和文件的等级
private static void viewFile(File f, int level) {
String str = "";
File[] fs = f.listFiles();
for (int i = 0; i < fs.length; i++) {
str = "";
for (int j = 0; j < level; j++) {
str = str + " ";
}
System.out.println(str + fs[i].getName());
if (fs[i].isDirectory()) {
viewFile(fs[i], level + 1);
}
}
}
// Fibonacci,菲波拉契数列
private static int fibonacci(int f) {
if (f <= 0) {
return 0;
}
if (1 == f || 2 == f) {
return 1;
}else
{
return fibonacci(f - 1) + fibonacci(f - 2);
}
}
//计算n!
public static int method(int n) {
if (n == 1) {
return 1;
} else {
return n * (method(n - 1));
}
}
//计算回文
public static boolean isHuiWen(String s) {
if (s == null) {
return false;
}
if (s.length() == 0 || s.length() == 1) {
return true;
}
char first = s.charAt(0);
char last = s.charAt(s.length() - 1);
if (first != last) {
return false;
} else {
return isHuiWen(s.substring(1, s.length() - 1));
}
}
}
分享到:
相关推荐
递归函数是编程中一种特殊的函数,它直接或间接地调用自身以解决问题。C语言中递归函数的教学设计是计算机专业学生必须掌握的重要知识点,因为递归在解决诸如树形结构、图的遍历、分治算法等问题中非常有用。 在...
《数理》递归论是一本深入探讨递归理论的学术著作,涵盖了算子、初等函数集、原始递归函数、递归函数集、递归可枚举集、判定问题以及谱系与计算复杂性等多个核心主题。下面将详细阐述这些知识点。 1. **算子**:在...
JavaScript中的递归函数是一种强大的编程工具,它允许函数在执行过程中调用自身,以解决复杂问题。递归的核心思想是将大问题分解成相同或相似的小问题,直到达到一个基础情况,即边界条件,然后逐步返回结果。在这个...
例如,计算阶乘的递归函数中,基础情况是n等于1时,阶乘结果为1。 以阶乘函数`factorial(n)`为例,递归实现如下: ```cpp int factorial(int n) { if (n ) { return 1; // 基础情况 } return n * factorial(n ...
1. **定义递归函数**:首先,明确递归函数的目的及其参数。例如,`int factorial(int n)`函数的目标是计算n的阶乘。 2. **确定递归关系**:找出问题与其子问题之间的联系,并用公式表示。例如,`factorial(n) = n *...
递归函数通常包括一个基本情况(base case),即可以直接解决的简单情况,以及一个或多个递归情况,它们会将问题分解为更小的子问题,直到达到基本情况为止。 标签中提到的“源码”意味着博客可能提供了可运行的...
通过不断将问题规模减小,最终到达基本情况(即没有盘子需要移动),递归函数将逐步回溯并执行所有必要的动作,从而完成整个任务。这种解决问题的方法虽然直观,但对于初学者来说可能较为抽象,但通过练习和理解,...
阿克曼函数是一种在计算机科学和数学中使用的递归函数,尤其在理论计算机科学和数据结构领域具有重要意义。它的名称来源于德国数学家伯恩哈德·阿克曼,该函数在早期计算复杂性理论的研究中起到了重要作用。阿克曼...
实验的心得体会部分,参与者应详细阐述在实践中的收获,例如理论知识如何与实际编程相结合,遇到的问题及解决方案,以及对递归思维和算法效率优化的新认识等。这样的总结能够帮助深化对递归算法本质的理解,并促进...
1. **递归下降解析法**:递归下降分析是通过一系列的函数来实现的,每个函数对应文法规则的一个非终结符。当解析器遇到输入中的某个符号时,它会调用相应的函数,这些函数可能进一步调用其他函数,直至遇到终结符并...
在该例子中,二叉树的节点总数可以通过其左右子树的节点数之和来计算,而空树的节点数为0,由此可以构造出计算二叉树节点总数的递归函数。 回溯策略则是一种通过逐个探索问题解空间的方法,在探索过程中一旦发现...
在IT领域,递归是一种非常重要的编程技巧,它在解决某些特定问题...通过本文介绍的阶乘计算和字符串反转的示例,相信读者对递归有了更深入的理解和认识。在日常开发中,合理运用递归,可以有效提升代码的效率和可读性。
在递归遍历算法中,我们使用了递归函数来实现遍历操作。在先序遍历中,我们先访问根节点,然后按先序遍历左子树,再按先序遍历右子树。在中序遍历中,我们先按中序遍历左子树,再访问根节点,然后按中序访问右子树。...
然后,编写一个递归函数,接收当前节点作为参数,遍历子节点并为每个子节点调用自身。在这个过程中,根据 `GetRanNumber` 生成的随机值调整子节点的位置,确保它们不会重叠。 最后,关于源代码文件“易语言递归算法...
nt a, Point b){ return hypot(a.x-b.x, a.y-b.y);}现在 Point 类型可以直接使用,而不需要每次都写 "struct"。...最后,针对递归难点,可以提供一些典型的递归问题,引导学生分析和解决,以加深对递归算法的认识。
3. 递归函数:定义绘制分支的函数,包括计算新分支的位置和角度,以及调用自身来绘制子分支。 4. 更新和绘制:在每次递归调用后更新图形,并延迟一段时间。 5. 摇曳效果:在计算新分支参数时引入随机变化,使树形看...
通过理解和实践这个递归解决的汉诺塔问题,不仅可以深入理解递归算法,还能对C语言的函数调用机制有更直观的认识。此外,这个例子也展示了递归在解决复杂问题时的优雅和简洁,对于任何想要提升编程技能的初学者来说...
《莫绍揆著作》集合了计算理论基础与数理逻辑领域的精华,涵盖了诸如递归函数论、递归论、可计算性理论、算法论以及数理逻辑等多个关键知识点。这些内容对于理解计算机科学的本质和深化理论认识至关重要。 一、递归...