java递归算法的例子。

 我来答
田怜H
2018-04-02 · TA获得超过576个赞
知道答主
回答量:13
采纳率:0%
帮助的人:4201
展开全部

阶乘:

要求:给定一个数值,计算出它的阶乘值,例如5的阶乘为5*4*3*2*1

实现:

[html] view plaincopy

<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 plaincopy

<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 plaincopy

<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 plaincopy

<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 plaincopy

<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 plaincopy

<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];  

xixiaohui002
2018-01-05 · TA获得超过1238个赞
知道小有建树答主
回答量:673
采纳率:50%
帮助的人:647万
展开全部
十进制整数转二进制字符串的递归写法:

public String dtob(int n) {
if (n == 0 || n == 1) {
return Integer.toString(n);
} else {
return dtob(n / 2) + Integer.toString(n % 2);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
公子俗
2018-01-05 · 超过15用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:38.3万
展开全部
n!=n*(n-1)*(n-2)*......*2*1等同于n!=n*(n-1)! 其中n!与(n-1)!
相当于F(n)=n * F(n-1);所以F(n)方法如下:
public int F(int n){
if(n == 0){
return 1;
}
return n * F(n - 1);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式