`

递归算法1

 
阅读更多
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class TestAF {
public static List<String> list = new ArrayList<String>();
public static BigDecimal count = new BigDecimal(0).setScale(0);
// 初始字符串.长度为10时,不打印结果,纯运行程序的时间是34秒。进行了60466175次计算。
//长度每再增加1,时间约增长6倍
//如果在控制台打印结果的话,时间再增长很多倍。
public static String gstr = "aaaaaa";

/**
* @param args
*/
public static void main(String[] args) {
//可删除,调试用
System.out.println(new Date());



String endStr="";
for (int i = 0; i < gstr.length(); i++) {
endStr = "f" + endStr;
}
String ret=gstr;
//递归调用change,满足结束条件时退出。"ffffff...."
while(!ret.equals(endStr)){
ret = change(ret, ret.length());
}


//可删除,调试用
// 打印调用次数
System.out.println(count);
System.out.println(new Date());


}

public static String change(String str, int lenth) {

//在末尾加一。add方法内部也递归调用,进行进位。如从aaff变到abaa。
String addResult = add(str, lenth - 1);
//递归调用change方法
return addResult;
}

public static String add(String str, int index) {
//index<0 时退出。
if (index < 0) {
System.out.println("index<0" + str);
return str;
} else {
int tmp = (int) str.charAt(index);
//index位加1
tmp++;
//加一后如果是g,则转变为a,并且index减一,递归调用add方法,在index-1位置加1来进位.
//如从aaff ->  aafa  ->  aaaa  ->abaa
if (tmp == 103) {
tmp = 97;
//字符串重新组合。更新index位置的字符。
String conResult = conStr(str, index, tmp);
//进位
index--;
return add(conResult, index);
} else {
String ss2 = conStr(str, index, tmp);
//计数,调试用。可删掉。
count = count.add(new BigDecimal(1));
//打印结果
System.out.println(ss2);
//返回结果
return ss2;
}
}
}

public static String conStr(String str, int index, int tmp) {
//替换index位置的字符
String ss1 = "";
if (index == str.length() - 1) {
ss1 = str.substring(0, index) + (char) tmp;
} else {
ss1 = str.substring(0, index) + (char) tmp
+ str.substring(index + 1);
}
return ss1;
}
}
分享到:
评论

相关推荐

    易语言递归算法1

    在"易语言递归算法1"中,我们主要关注的是递归算法的应用。递归是计算机科学中一种强大的工具,它通过函数或过程自身调用自身的方式来解决问题。 递归算法通常包括两个基本部分:基本情况(Base Case)和递归情况...

    易语言源码递归算法1.rar

    在易语言源码递归算法1.rar这个压缩包中,很可能包含了多个易语言源代码文件,用于演示或教学如何使用递归解决各种问题。可能包括但不限于斐波那契数列、汉诺塔、图的深度优先搜索等经典递归算法的实现。这些源代码...

    实验1-递归算法1

    **实验1-递归算法1** 递归算法是一种在编程中广泛应用的方法,它通过函数自身调用自身来解决问题。在本实验中,我们将探讨递归的实现方式,并通过两个具体的例子——Fibonacci数列和全排列问题——来加深理解。 ##...

    5!递归算法和非递归算法

    递归算法和非递归算法 在计算机科学与编程领域中,递归算法与非递归算法是两种非常重要的计算方法。本文将详细介绍这两种算法的特点、应用场景以及如何实现它们,特别针对初学者及面试准备者。 #### 递归算法 ...

    VC对磁盘文件遍历搜索的递归算法和非递归算法

    在VC++(Visual C++)环境中,有多种方法可以实现这一目标,其中最常见的是递归算法和非递归算法。这两种方法各有优缺点,适用于不同的场景。 **递归算法**: 递归算法是一种基于函数自身调用解决问题的方法。在...

    .net 递归算法 .net 递归算法.net 递归算法

    在.NET编程环境中,递归算法是一种强大的工具,它允许函数或方法调用自身来解决复杂问题。递归的核心思想是将大问题分解为相同或相似的小问题,直到问题变得足够简单,可以直接得出答案。这种解决问题的方式在数据...

    acm递归算法总结竞赛

    1. **递归定义**:递归算法是函数或过程通过调用自身来解决问题的一种方法。每次调用都将问题分解为更小的部分,直到达到基本情况。 2. **基本原理**:递归算法通常包括两个部分:递归规则(如何将大问题分解为小...

    abap简单递归算法

    ### ABAP简单递归算法解析 #### 一、引言 ABAP(Advanced Business Application Programming)是一种用于SAP系统的编程语言。它不仅支持传统的过程化编程,还支持面向对象编程和Web开发。本文将深入探讨一个ABAP中...

    递归算法与循环算法的分析

    1. 递归算法的定义:在程序设计中,在调用一个函数的过程中又出现直接或间接调用其函数本身的现象。 2. 循环算法的定义:在程序设计中,一个功能的实现需要不断的变化,有穷的循环判断条件,符合条件就继续循环,不...

    快速排序算法设计与分析总结 二叉树与树的转换前序、后序的递归、非递归算法,层次序的非递归算法的实现

    快速排序算法设计与分析总结 二叉树与树的转换前序、后序的递归、非递归算法,层次序的非递归算法的实现 二叉树与树的转换前序、后序的递归、非递归算法,层次序的非递归算法的实现,应包含建树的实现 实现树与...

    18.递归算法与递归算法应用.ppt

    18.递归算法与递归算法应用.ppt

    合并排序递归和非递归算法

    1. **空间效率**:递归算法可能会占用更多的栈空间,因为每次递归调用都会增加栈的深度。而非递归算法则通常需要额外的数据结构来存储待处理的任务。 2. **执行效率**:递归算法在某些情况下可能导致大量的函数调用...

    递归算法ppt让你快速上手

    "递归算法ppt让你快速上手" 递归算法是计算机科学中的一种重要算法思想,它可以解决许多复杂的问题。下面是递归算法的知识点总结: 1. 递归的定义:若一个对象部分地包含它自己,或用它自己给自己定义,则称这个...

    递归算法专题ppt

    1. **确定基本情况**:这是递归算法中最小的子问题,可以直接给出答案。 2. **定义递归规则**:如何将大问题分解为小问题,并通过这些小问题的解决方案组合成大问题的解决方案。 3. **分析递归深度**:递归调用的...

    程序设计中递归算法

    ### 递归算法在程序设计中的应用 #### 一、递归的概念与本质 递归是一种重要的编程思想,在计算机科学和数学领域都有广泛的应用。它指的是一个过程或函数直接或间接地调用自身来解决问题的方法。递归的核心在于将...

    汉诺塔问题的非递归算法

    非递归算法解决了这个问题,提供了一个不同于传统递归解决方案的方法。对于n个圆盘的情况,非递归算法的核心在于通过交替执行两个步骤来移动圆盘: 1. **步骤1**:根据圆盘数量的奇偶性,按顺时针方向将圆盘1从当前...

    递归算法的详解,各种常见递归算法

    递归算法是一种强大的编程技术,它通过函数或过程在解决问题时调用自身来解决更小规模的相同问题。递归的基本概念在于一个函数在定义中包含对自身的引用,或者问题的解决方案依赖于较小规模问题的解决方案。在程序...

    递归算法转为非递归算法

    递归算法转为非递归算法。方法、过程,用栈的原理

    利用递归算法求阶乘(VB6.0源代码)利用递归算法求阶乘

    在这个主题中,我们将深入探讨如何使用递归算法在VB6.0(Visual Basic 6.0)中计算阶乘。VB6.0是Microsoft开发的一款经典可视化编程环境,用于创建Windows应用程序。 阶乘是一个数学概念,表示一个正整数n的所有...

Global site tag (gtag.js) - Google Analytics