Java之递归

  在递归中需要注意两点:

    1.递归是在函数中调用自己

    2.在递归中,必须要有一个明确的条件作为结束,否则会形成死循环,一个劲的调用下去

  从网上找几个例子转过来

============================================================

  一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现

  分析:第一位是1,第二位是1,第三位是第1位和第2位之和,后面每位都是前面两位之和

class  Revert
{
    public static void main(String[] args)
    {
        int i = fn(8);
        System.out.println(i);
    }

    public static int fn(int n){
        if(n == 1){
            return 1;   //第一位返回1
        }else if(n == 2){
            return 1;    //第二位也返回1
        }else{
            return fn(n-1) + fn(n-2);        //从第三位开始,每位返回前两位之和
        }
    }
}

=======================================================================

  递归实现回文判断  回文: String s1 = "abcddcba"       String s2 = "abcba"

  

class loopWord
{
    public static void main(String[] args)
    {
        boolean a = loopWord("abcdcba",0);
        System.out.println(a);
    }

    static boolean loopWord(String str, int i) {

        if (str.charAt(i) == str.charAt(str.length() - 1 - i)) {    //判断是否相同
            if (i == (str.length() + 1) / 2){    //判断是否到了最中间
                return true;    //如果都相同,返回true
            }
            System.out.println("这个时候i=" + i + "   字符串的第" + i +"位为:" + str.charAt(i));    //为方便观察,输出语句
            return loopWord(str, i + 1);    //如果第一位和最后以为相同,则返回从第二位和倒数第二位
        } else {
            return false;
        }
    }
}

以上代码的输出结果为

这个时候i=0   字符串的第0位为:a
这个时候i=1   字符串的第1位为:b
这个时候i=2   字符串的第2位为:c
这个时候i=3   字符串的第3位为:d
true

其实这里最重要的参数是判断位置,如果第一位和最后以为相同,则判断第二位和倒数第二位,当判断到中间时,所有字符都相同的时候,则为回文

==============================================================

时间: 2024-10-16 01:52:54

Java之递归的相关文章

黑马程序员——Java基础---递归

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流!                                                                       递归 Java支持递归. 递归是根据自身定义内容的过程.就java编程而言,递归是一个允许方法调用自身的特征. 调

java 中递归的实现 以及利用递归方法实现汉诺塔

今天说下java语言中比较常见的一种方法,递归方法. 递归的定义 简单来说递归的方法就是"自己调用自己",通过递归方法往往可以将一个大问题简单化,最终压缩到一个易于处理的程度.对于编程来说,每次递归都会减少数据量: java中递归的模式 每个递归函数的开头一定是判断递归结束条件是否满足的语句(一般是if语句):函数体一定至少有一句是"自己调用自己"的.每个递归函数一定有一个控制递归可以终结的变量(通常是作为函数的参数而存在).每次自己调用自己时,此变量会变化(一般是

Java非递归遍历树算法---以遍历文件为例

在网上看到的算法,跟之前自己写的一个非遍历算法类似,先记录下来. 非递归: import java.io.File; import java.util.LinkedList; public class FileSystem { public static void main(String[] args) { long a = System.currentTimeMillis(); LinkedList list = new LinkedList(); File dir = new File("c

Java 之递归遍历目录

Java 之递归遍历目录 一.内容 输出指定目录(文件夹)下的所有文件(包括目录)的绝对路径 二.源代码:RecursiveListDirectory.java 1 package cn.com.zfc.day016; 2 3 import java.io.File; 4 5 /** 6 * @describe 递归遍历目录 7 * @author zfc 8 * @date 2018年1月1日 上午8:44:55 9 */ 10 public class RecursiveListDirect

Java使用递归实现全排列的代码

将写内容过程经常用到的一些内容备份一下,下边内容是关于Java使用递归实现全排列的内容. public class AllPermutation { public static void main(String[] args) { char[] source=new char[]{'A','B','C'}; char[] result=new char[source.length]; allPermutation(0,source,result); } public static void al

java非递归检索文件夹下所有文件的代码

把开发过程比较重要的一些内容段做个珍藏,下面的内容段是关于java非递归检索文件夹下所有文件的内容,应该是对大家有所帮助. DateFormat df = DateFormat.getDateTimeInstance();LinkedList<File> folders = new LinkedList<File>();LinkedList<File> filelists = new LinkedList<File>();File dir = new Fil

Java API —— 递归

1.方法定义中调用方法本身的现象 2.递归注意实现 1) 要有出口,否则就是死递归 2) 次数不能太多,否则就内存溢出 3) 构造方法不能递归使用 3.递归解决问题的思想和图解: 例子1:求5的阶乘 package diguidemos; /** * Created by gao on 15-12-27. */ /* * 需求:请用代码实现求5的阶乘. * * 有几种方案实现呢? * A:循环实现 * B:递归实现 * a:做递归要写一个方法 * b:出口条件 * c:规律 */ public

Java使用递归找出某目录下的所有子目录以及子文件

1 /* 2 使用递归找出某目录("C:\\JavaProducts")下的所有子目录以及子文件 3 */ 4 5 import java.util.*; 6 import java.io.*; 7 8 public class FileRecursionPrintDemo{ 9 public static void main(String[] args){ 10 List<String> paths = new ArrayList<String>(); 11

java——用递归和IO流来实现文件的复制

1 import java.io.ByteArrayInputStream; 2 import java.io.ByteArrayOutputStream; 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.Ou

Java版——递归

1.Java堆栈和运行时堆栈是两个不同的概念:他们有相似点:在处理方法调用中所扮演的角色基本上是相同的,所以尽管存储的方式不同,却存储了进行这项处理的相似信息.Java解释器的任务是转换.class文件中的信息字节码,这样运行时堆栈可以接管Java堆栈(其仅仅是一个抽象构造)的工作. 2.每个方法的状态,包括main()方法,都是全部自动变量的内容.方法的参数以及返回地址(指出了重新返回器调用者的位置)描述的.包含所有这些信息的数据域在运行时堆栈中,称为活动记录或是栈结构.只要其中一个方法在执行