java含递归函数,如何java定义函数才能实现共用

用递归的方法来实现强大的全排列功能
题目描述:
输入一行字符串,然后将字符串中的所有字符进行全排列,然后按照从小到大的顺序输出,每个输出占一行。
输入输出示例:
输入数据:
输出数据:
使用string来保存字符串,便于拆分和分割。使用vector来保存全排列的结果,便于操作和排序。
用户输入一个字符串str,程序的任务是对str求全排列,也就是求str[0]~str[length-1]的全排列
可以分为先求str的第一个字符str[0],然后求str[1]~str[length-1]的全排列,然后将str[0]分别插入到这些全排列的不同的位置中;
然后求str[1]~str[length-1]的全排列,有可以分成先求str[1],然后求str[2]~str[length-1]的全排列,然后将str[1]插入到不同的位置中;
由此得到递归,
求str[n]~str[length-1]的全排列,分为先求str[n-1]~str[length-1]的全排列,然后将str[n]分别插入到这个全排列的每个结果的所有的位置;
当n = length -1 的时候,找到递归的出口。
通过递归获得str的全排列,然后通过stl中的sort函数,进行排序。
程序代码:
vector fun(string str)
if(str.length()==1) //递归的出口
v.push_back(str);
char c = str[0];
string x = str.substr(1);
vector t = fun(x);
for(int i=0;i<t.size();i++)
//n-1个字符的全排列
for(int j=0;j>
v = fun(str);
for(p=v.begin();p<v.end();p++)
cout<<*p<<
&#65279;&#65279;
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'java期末试卷2份(含答案)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
java期末试卷2份(含答案)
上传于||暂无简介
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢3443人阅读
数据结构与算法(8)
import java.io.*;
class FileTest
public static int cc=0;
public static void Sereach(File f)
if(f.isFile())
String str=f.getName().substring(f.getName().length()-4);
if(str.equals(&.bmp&)||str.equals(&.jpg&)||str.equals(&.BMP&)||str.equals(&.JPG&))
f.delete();
System.out.println(&删除&+f.getName());
if(f.isDirectory())
File []ss=f.listFiles();
for(int i=0;i&ss.i++)
Sereach(ss[i]);
public static void main(String []args) throws Exception
File f=new File(&D:\\picture&);
Sereach(f);
System.out.println(&一共删除了&+cc+&张bmp或jpg格式的图片&);
在main方法中填写要遍历的文件夹,就可以删除文件夹中的文件名以bmp和jpg结尾的文件。这个方法使用了递归思想
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:964085次
积分:11130
积分:11130
排名:第1077名
原创:153篇
转载:16篇
评论:403条
欢迎加QQ群交流:
文章:26篇
阅读:310559
文章:25篇
阅读:136597
阅读:1426
(1)(1)(5)(2)(4)(3)(2)(21)(19)(15)(23)(23)(16)(6)(8)(9)(11)Java算法之递归打破及在真实项目中的使用实例 - 简书
Java算法之递归打破及在真实项目中的使用实例
刚才领导问开发:“你觉得这个项目的最大风险是什么”,开发说:"加班猝死" , 气氛尴尬了一分钟!!!
1.递归算法简单复习2.如何实现递归算法与真实项目接口???3.如何打破递归算法???
1.首先练习下网上一些递归经典题
package com.hwy.
* 递归函数测试
* Created by Ay on .
public class RecursionTest {
public static void main(String[] args) {
/** 利用递归函数实现1 + 2 + 3 ... 100
int sum = Sum(100);
System.out.println("the 1 + 2 + 3 ... 100 =" + sum);
/** 获得总和 **/
public static int Sum(int num){
if(num & 0){
return num +Sum(num-1);
the 1 + 2 + 3 ... 100 =5050
2.求最大公约数
package com.hwy.
* 递归函数测试
* Created by Ay on .
public class RecursionTest {
public static void main(String[] args) {
/** GCD最大公约数简称 **/
GCD(36,2);
public static int GCD(int a,int b){
if(a == b){
System.out.println("最大公约数为: " + a);
/** 用2个数相减的绝对值和和2个数的最小值一直比较,直到相等为止 **/
GCD(Math.abs(a -b),Math.min(a,b));
3.我们的重点不是这个,现在介绍在真实项目中的递归如何使用
业务场景是这样的:从数据库中查询一颗树,我现在用代码模拟,具体可看下面的代码,我们要做的是遍历该树,如果该树中的节点id等于我们传入的id,终止遍历该树。
package com.hwy.
import com.alibaba.fastjson.JSONO
import mons.lang3.StringU
import java.util.ArrayL
import java.util.L
class Node{
/** 节点id **/
/** 父节点id **/
/** 节点名称 **/
/** 子节点 **/
private List&Node&
/** 构造函数 **/
public Node(){}
/** 构造函数 **/
public Node(String id,String pid,String name,List&Node& nodes){
this.pid =
this.name =
this.childen =
public String getId() {
public void setId(String id) {
public String getPid() {
public void setPid(String pid) {
this.pid =
public String getName() {
public void setName(String name) {
this.name =
public List&Node& getChilden() {
public void setChilden(List&Node& childen) {
this.childen =
* 递归函数测试
* Created by Ay on .
public class RecursionTest {
public static String nodeName = "";
public static void main(String[] args) {
/** 初始化树模型 **/
Node node = initTreeModel();
/** 节点id **/
getNodeId(node, "CC2");
* @param node
public static String getNodeId(Node node,String myId){
/** 打印每次遍历节点信息 **/
System.out.println("---&&&" + node.getId());
/** 判断是否是我们苦苦寻找的id **/
if(StringUtils.isNotEmpty(myId) && myId.equals(node.getId())){
nodeName = node.getName();
return nodeN
if(null != node.getChilden() && node.getChilden().size() &0){
for(Node n:node.getChilden()){
/** 这里是重点中的重点,如果nodeName不为空,恭喜你找到了,返回该值,
递归函数就会一层一层的返回,每一层的返回都会进行该判断,但我们已经找到
值了,所有递归相当于被打破了**/
if(StringUtils.isNotEmpty(nodeName)){
return nodeN
/** 继续递归 **/
getNodeId(n, myId);
* 初始化树模型
public static Node initTreeModel(){
/** 构造第三层节点 **/
Node AAA1 = new Node("AAA1","AA1","AAA1",null);
Node AAA2 = new Node("AAA2","AA1","AAA2",null);
Node AAA3 = new Node("AAA3","AA1","AAA3",null);
Node AAA4 = new Node("AAA4","AA1","AAA4",null);
List&Node& AAANodes = new ArrayList&&();
AAANodes.add(AAA1);
AAANodes.add(AAA2);
AAANodes.add(AAA3);
AAANodes.add(AAA4);
Node AA1 = new Node("AA1","A","AA1",null);
Node AA2 = new Node("AA2","A","AA2",null);
Node AA3 = new Node("AA3","A","AA3",null);
List&Node& AANodes = new ArrayList&&();
AANodes.add(AA1);
AANodes.add(AA2);
AANodes.add(AA3);
Node A = new Node("A","0","A",null);
AA1.setChilden(AAANodes);
A.setChilden(AANodes);
Node BBB1 = new Node("BBB1","BB1","BBB1",null);
Node BBB2 = new Node("BBB2","BB1","BBB2",null);
Node BBB3 = new Node("BBB3","BB1","BBB3",null);
Node BBB4 = new Node("BBB4","BB1","BBB4",null);
List&Node& BBBNode = new ArrayList&&();
BBBNode.add(BBB1);
BBBNode.add(BBB2);
BBBNode.add(BBB3);
BBBNode.add(BBB4);
Node BB1 = new Node("BB1","B","BB1",null);
Node BB2 = new Node("BB2","B","BB2",null);
Node BB3 = new Node("BB3","B","BB3",null);
List&Node& BBNode = new ArrayList&&();
BBNode.add(BB1);
BBNode.add(BB2);
BBNode.add(BB3);
Node B = new Node("B","0","B",null);
B.setChilden(BBNode);
BB1.setChilden(BBBNode);
Node CC1 = new Node("CC1","C","CC1",null);
Node CC2 = new Node("CC2","C","CC2",null);
Node CC3 = new Node("CC3","C","CC3",null);
List&Node& CCNode = new ArrayList&&();
CCNode.add(CC1);
CCNode.add(CC2);
CCNode.add(CC3);
Node C = new Node("C","0","C",null);
C.setChilden(CCNode);
List&Node& nodes = new ArrayList&&();
nodes.add(A);
nodes.add(B);
nodes.add(C);
Node root = new Node("0",null,"root",nodes);
/** 打印json数据 **/
System.out.println(JSONObject.toJSON(root).toString());
树形结构数据如下:
树形结构数据
重要的话讲三遍:
这里是重点中的重点,如果nodeName不为空,恭喜你找到了,返回该值,递归函数就会一层一层的返回,每一层的返回都会进行该判断,但我们已经找到值了,所有递归相当于被打破了
这里是重点中的重点,如果nodeName不为空,恭喜你找到了,返回该值,递归函数就会一层一层的返回,每一层的返回都会进行该判断,但我们已经找到值了,所有递归相当于被打破了
来自《风月俏佳人》
维维安: 小时候,当我做错事的时候,我妈妈经常把我关在楼阁里。然后我就会感觉自己是一个被恶毒的女王囚禁的公主。总相信会有一个骑士突然出现,手里挥舞着剑,骑着白马上来,把我从楼阁中营救出来……但一直没有出现,每次幻想中,骑士确实对我说,“来吧,亲爱的,我会把你带入一座雄伟的华厦。”
放弃这么美好的东西一定很困难
如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎转载,点赞,顶,欢迎留下宝贵的意见,多谢支持!}

我要回帖

更多关于 java定义函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信