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

递归函数的认识

阅读更多
    什么是递归?
    其实递归是一种算法的思想.也就是"自己"调用"自己",层层递归深入的一种编程思想.类似数学中的数学归纳法一样.从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));
		}
	}
}
0
3
分享到:
评论

相关推荐

    C语言递归函数教学的设计与探讨.pdf

    递归函数是编程中一种特殊的函数,它直接或间接地调用自身以解决问题。C语言中递归函数的教学设计是计算机专业学生必须掌握的重要知识点,因为递归在解决诸如树形结构、图的遍历、分治算法等问题中非常有用。 在...

    [数理] 递归论 PDF

    《数理》递归论是一本深入探讨递归理论的学术著作,涵盖了算子、初等函数集、原始递归函数、递归函数集、递归可枚举集、判定问题以及谱系与计算复杂性等多个核心主题。下面将详细阐述这些知识点。 1. **算子**:在...

    基于JS递归函数细化认识及实用实例(推荐)

    JavaScript中的递归函数是一种强大的编程工具,它允许函数在执行过程中调用自身,以解决复杂问题。递归的核心思想是将大问题分解成相同或相似的小问题,直到达到一个基础情况,即边界条件,然后逐步返回结果。在这个...

    认识递归.docx

    例如,计算阶乘的递归函数中,基础情况是n等于1时,阶乘结果为1。 以阶乘函数`factorial(n)`为例,递归实现如下: ```cpp int factorial(int n) { if (n ) { return 1; // 基础情况 } return n * factorial(n ...

    认识递归(详细版).docx

    1. **定义递归函数**:首先,明确递归函数的目的及其参数。例如,`int factorial(int n)`函数的目标是计算n的阶乘。 2. **确定递归关系**:找出问题与其子问题之间的联系,并用公式表示。例如,`factorial(n) = n *...

    递归出来的美丽分形世界

    递归函数通常包括一个基本情况(base case),即可以直接解决的简单情况,以及一个或多个递归情况,它们会将问题分解为更小的子问题,直到达到基本情况为止。 标签中提到的“源码”意味着博客可能提供了可运行的...

    递归实现汉诺塔

    通过不断将问题规模减小,最终到达基本情况(即没有盘子需要移动),递归函数将逐步回溯并执行所有必要的动作,从而完成整个任务。这种解决问题的方法虽然直观,但对于初学者来说可能较为抽象,但通过练习和理解,...

    akm.rar_AKM_akm函数_阿克曼

    阿克曼函数是一种在计算机科学和数学中使用的递归函数,尤其在理论计算机科学和数据结构领域具有重要意义。它的名称来源于德国数学家伯恩哈德·阿克曼,该函数在早期计算复杂性理论的研究中起到了重要作用。阿克曼...

    算法设计—递归实验报告

    实验的心得体会部分,参与者应详细阐述在实践中的收获,例如理论知识如何与实际编程相结合,遇到的问题及解决方案,以及对递归思维和算法效率优化的新认识等。这样的总结能够帮助深化对递归算法本质的理解,并促进...

    编译原理 递归下降语法分析程序(代码+说明文档)

    1. **递归下降解析法**:递归下降分析是通过一系列的函数来实现的,每个函数对应文法规则的一个非终结符。当解析器遇到输入中的某个符号时,它会调用相应的函数,这些函数可能进一步调用其他函数,直至遇到终结符并...

    基于数据结构的递归程序实现策略探讨.pdf

    在该例子中,二叉树的节点总数可以通过其左右子树的节点数之和来计算,而空树的节点数为0,由此可以构造出计算二叉树节点总数的递归函数。 回溯策略则是一种通过逐个探索问题解空间的方法,在探索过程中一旦发现...

    递归方法求阶乘字符串反转C#

    在IT领域,递归是一种非常重要的编程技巧,它在解决某些特定问题...通过本文介绍的阶乘计算和字符串反转的示例,相信读者对递归有了更深入的理解和认识。在日常开发中,合理运用递归,可以有效提升代码的效率和可读性。

    遍历二叉树递归+非递归实验报告.doc

    在递归遍历算法中,我们使用了递归函数来实现遍历操作。在先序遍历中,我们先访问根节点,然后按先序遍历左子树,再按先序遍历右子树。在中序遍历中,我们先按中序遍历左子树,再访问根节点,然后按中序访问右子树。...

    易语言递归算法画树

    然后,编写一个递归函数,接收当前节点作为参数,遍历子节点并为每个子节点调用自身。在这个过程中,根据 `GetRanNumber` 生成的随机值调整子节点的位置,确保它们不会重叠。 最后,关于源代码文件“易语言递归算法...

    算法竞赛入门经典授课教案第4章_函数和递归.doc

    nt a, Point b){ return hypot(a.x-b.x, a.y-b.y);}现在 Point 类型可以直接使用,而不需要每次都写 "struct"。...最后,针对递归难点,可以提供一些典型的递归问题,引导学生分析和解决,以加深对递归算法的认识。

    采用递归算法编程实现下列分形树

    3. 递归函数:定义绘制分支的函数,包括计算新分支的位置和角度,以及调用自身来绘制子分支。 4. 更新和绘制:在每次递归调用后更新图形,并延迟一段时间。 5. 摇曳效果:在计算新分支参数时引入随机变化,使树形看...

    c语言汉诺塔的递归算法

    通过理解和实践这个递归解决的汉诺塔问题,不仅可以深入理解递归算法,还能对C语言的函数调用机制有更直观的认识。此外,这个例子也展示了递归在解决复杂问题时的优雅和简洁,对于任何想要提升编程技能的初学者来说...

    莫绍揆著作

    《莫绍揆著作》集合了计算理论基础与数理逻辑领域的精华,涵盖了诸如递归函数论、递归论、可计算性理论、算法论以及数理逻辑等多个关键知识点。这些内容对于理解计算机科学的本质和深化理论认识至关重要。 一、递归...

Global site tag (gtag.js) - Google Analytics