java递归函数例子
阶乘:
要求:给定一个数值,计算出它的阶乘值,例如5的阶乘为5*4*3*2*1
实现:
[html] view plain
<span style="font-size:12px;"> // 利用递归实现一个数的阶乘值 private static BigDecimal getNum(BigDecimal inNum) { if (inNum.compareTo(BigDecimal.ONE) == 0) { return inNum; } return inNum.multiply(getNum(inNum.subtract(BigDecimal.ONE))); }</span>
(2)Fibonacci数列:1,1,2,3,5,8,13……
要求:找出数列中指定index位置的数值
实现:
[html] view plain
<span style="font-size:12px;"> // 利用递归实现了Fibonacci数列 private static int fab(int index) { if (index == 1 || index == 2) { return 1; } else { return fab(index - 1) + fab(index - 2); } }</span>
(3)汉诺塔
要求:汉诺塔挪动
实现:
[html] view plain
<span style="font-size:12px;"> <span style="white-space:pre;"> </span>private static final String DISK_B = "diskB"; <span style="white-space:pre;"> </span>private static final String DISK_C = "diskC"; <span style="white-space:pre;"> </span>private static final String DISK_A = "diskA"; <span style="white-space:pre;"> </span>static String from=DISK_A; <span style="white-space:pre;"> </span> static String to=DISK_C; <span style="white-space:pre;"> </span> static String mid=DISK_B; <span style="white-space:pre;"> </span> public static void main(String[] args) { <span style="white-space:pre;"> </span> String input=JOptionPane.showInputDialog("please input the number of the disks you want me move."); <span style="white-space:pre;"> </span> int num=Integer.parseInt(input); <span style="white-space:pre;"> </span> move(num,from,mid,to); <span style="white-space:pre;"> </span> }</span>
[html] view plain
<span style="font-size:12px;"> // 利用递归实现汉诺塔 private static void move(int num, String from2, String mid2, String to2) { if (num == 1) { System.out.println("move disk 1 from " + from2 + " to " + to2); } else { move(num - 1, from2, to2, mid2); System.out.println("move disk " + num + " from " + from2 + " to " + to2); move(num - 1, mid2, from2, to2); } }</span>
(4)排列组合
要求:将输入的一个字符串中的所有元素进行排序并输出,例如:你给出的参数是"abc",
则程序会输出
abc
acb
bac
bca
cab
cba
实现:
[html] view plain
<span style="font-size:12px;"><span style="white-space:pre;"> </span>public static void permute(String str) { <span style="white-space:pre;"> </span> char[] strArray = str.toCharArray(); <span style="white-space:pre;"> </span> permute(strArray, 0, strArray.length - 1); <span style="white-space:pre;"> </span>}</span>
[html] view plain
<span style="font-size:12px;"> // 利用递归实现,将输入的一个字符串中的所有元素进行排序并输出 public static void permute(char[] list, int low, int high) { int i; if (low == high) { String cout = ""; for (i = 0; i <= high; i++) { cout += list[i]; } System.out.println(cout); } else { for (i = low; i <= high; i++) { char temp = list[low]; list[low] = list[i]; list[i] = temp; permute(list, low + 1, high); temp = list[low];
‘贰’ 递归Java详解举例说明一下
不用说那么复杂吧,和你一样咱也是初学者,靠目前我的理解就是程序自己调用自己!
先看简单的吧,比较好理解,递归用处太多了,复杂的非常复杂,但是思路都一样举一反三!
publicclass递归
{
publicstaticvoidmain(String[]args)
{
System.out.println(" ==========递归演示========== ");
init(10);
}
//初始化!
privatestaticvoidinit(inta)
{
a--;//自减一次!
System.out.println(a);//打印!
if(a>0)//判断是否大于0
init(a);//如果是就调用自己一次!
else
return;//如果等于或者小于0了就结束不在循环了!
}
}
这个输出结果就是9,8,7,6,...一直输出到0就结束了!
‘叁’ 求JAVA递归的应用
/*递归的经典例子很多,许多基础课本都会讲到“汉诺塔”,这个,就不给你了,上网搜,相当多的。
不过,楼上大哥说递归都可以用循环解决,可能是小弟俺所学太少,无法苟同。下面, 是用递归实现批量文件的复制。(当然,你千万别以为我递归的是文件,只是文件名)。之所以要用递归,是因为,文件夹是可以一个套一个,它套了多少个,你不知道。如果不用递归,恐怕只能复制有限层文件夹及文件,且你的代码相当长。
这个Copy.java实现的功能是将e盘文件夹1中的所有东西复制并按照原来文件夹的结构放入"e:\\1x"中,这与在操作系统中的复制粘贴是一样的。只不过,通过设置数组b的大小,可以有效地控制复制的速度(尤其在复制大文件时可以看出的区别)。*/
import java.io.*;
public class Copy
{
static String s="e:\\1x";
public void x(File f)
{
for(File f1:f.listFiles())
{
File f2=new File(s+(f1.getPath().replace("e:\\1","")));
if(f1.isDirectory())
{
f2.mkdirs();
x(f1);
}
else
{
try
{
FileInputStream fis=new FileInputStream(f1);
FileOutputStream fos=new FileOutputStream(f2);
byte b[]=new byte[1000];
while(fis.available()>0)
{
fis.read(b);
fos.write(b);
}
fos.flush();
fis.close();
fos.close();
}
catch(IOException e)
{
System.out.println("Error");
}
}
}
}
public static void main(String args[])
{
File f=new File("e:\\1");
new Copy().x(f);
}
}
‘肆’ 什么是递归,用Java怎么实现
递归是函数调用自身,从而形成循环重复执行的现象。简单的示例名称为a的函数调用自身,a(){ a() } 。常见的用法比如处理树形结构数据,商品多级分类、多层级部门机构等
‘伍’ java方法递归调用
python">1.当n=1时,返回1
2.当n>1时,返回n+(n-1)
最简单的了,还有个有名的数列递归叫做“斐波那契”数列递归
‘陆’ java递归算法的例子
简单理解一下:
递归就是调用上一步的结果,来产生下一步的结果,一般上一步的结果是由函数得到,所以下一步直接调用函数,参数不一样而已:
阶乘算法:
public int JieCheng(int n){
return n*JieCheng(n-1);
}
当然还必要一些条件判断吗,就是终止递归调用的,jiecheng为n=1 时 就return 1;
‘柒’ 递归范例 java
/**
* 二分查找
* @author tenglian
*
*/
class BinaryFind{
public void find(int leftIndex, int rightIndex, int val, int arr[]){
int midIndex = (leftIndex + rightIndex)/2;
int midVal = arr[midIndex];
if(rightIndex >= leftIndex){
if(midVal > val){
find(leftIndex, midIndex - 1, val, arr);
} else if(midVal < val){
find(midIndex + 1, rightIndex, val, arr);
} else if(midVal == val){
System.out.println(midIndex);
}
} else {
System.out.println("NotDataFound");
}
}
}
上面这个例子是个二分查找,典型的 用到 递归的例子 自己运行下看看,相信你能理解 不难
‘捌’ java 递归 定义是什么请举出个简单的例子,谢谢
一个类的定义方法:
public class Node
{
int value;
Node next;
以下有一些set,get方法及构造方法
}
一个类的成员是当前类
一个方法:
public int f(int n)
{
if(n<=1)
return 1;
else
return n+f(n-1);
}
以上是求1-n的累加
该方法调用了该方法自己
‘玖’ Java中的递归如何使用最好给出详细的例题
程序调用自身的编程技巧称为递归( recursion)。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。 注意: (1) 递归就是在过程或函数里调用自身; (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
上面是递归的定义,我现在给你一个JAVA最简单的递归的我写的例子,你可以对照着看:
public class Test { public static void main(String[] args) { output(1); } private static void output(int n) { // TODO Auto-generated method stub System.out.println(n); if(n<100){ n++; output(n); } } }
‘拾’ 用java递归方法实现
publicintfun(intn){
if(n==0||n==1)return1;
returnn*fun(n-1);
}