问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java中递归算法是什么怎么算的?

发布网友 发布时间:2022-04-23 10:01

我来回答

7个回答

热心网友 时间:2022-05-14 13:10

一、递归算法基本思路:

Java递归算法是基于Java语言实现的递归算法。递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法表示问题的解。递归往往能给我们带来非常简洁非常直观的代码形式,从而使我们的编码大大简化,然而递归的思维确实跟我们的常规思维相逆的,通常都是从上而下的思维问题,而递归趋势从下往上的进行思维。

二、递归算法解决问题的特点:

【1】递归就是方法里调用自身。

【2】在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

【3】递归算法代码显得很简洁,但递归算法解题的运行效率较低。所以不提倡用递归设计程序。

【4】在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。

【5】在做递归算法的时候,一定把握出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口就是一个条件,当满足了这个条件的时候我们就不再递归了。

三、代码示例:

public class Factorial {

    //this is a recursive function

    int fact(int n){

        if (n==1) return 1;

        return fact(n-1)*n;

    }

     

}

     public class TestFactorial {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        Factorial factorial=new Factorial();

        System.out.println("factorial(5)="+factorial.fact(5));

    }
}

代码执行流程图如下:

此程序中n=5就是程序的出口。

热心网友 时间:2022-05-14 14:28

Java递归算法是基于Java语言实现的递归算法。递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法表示问题的解。递归往往能给我们带来非常简洁非常直观的代码形式,从而使我们的编码大大简化,然而递归的思维确实跟我们的常规思维相逆的,通常都是从上而下的思维问题,而递归趋势从下往上的进行思维。

二、递归算法解决问题的特点:

【1】递归就是方法里调用自身。

【2】在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

【3】递归算法代码显得很简洁,但递归算法解题的运行效率较低。所以不提倡用递归设计程序。

【4】在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。

【5】在做递归算法的时候,一定把握出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口就是一个条件,当满足了这个条件的时候我们就不再递归了。

三、代码示例:

代码执行流程图如下:

此程序中n=5就是程序的出口。

Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

热心网友 时间:2022-05-14 16:03

简单点说是在方法中调用自己,直到某一条件退出。

热心网友 时间:2022-05-14 17:54

public String sss(){
if(*******){
sss();
}
}

热心网友 时间:2022-05-14 20:02

递归做为一种算法在程序设计语言中广泛应用.是指函数/过程/子程序在运行过程递归的作用:递归算法可以解决一些通过递归定义的题目。首先需要明白什么是递归

热心网友 时间:2022-05-14 22:27

1.汉诺塔问题
import javax.swing.JOptionPane;
  public class Hanoi {
  private static final String DISK_B = "diskB";
  private static final String DISK_C = "diskC";
  private static final String DISK_A = "diskA";
  static String from=DISK_A;
  static String to=DISK_C;
  static String mid=DISK_B;
  public static void main(String[] args) {
  String input=JOptionPane.showInputDialog("please input the number of the disks you want me move.");
  int num=Integer.parseInt(input);
  move(num,from,mid,to);
  }
  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);
  }
  }
  }
2. 这是一个排列的例子,它所做的工作是将输入的一个字符串中的所有元素进行排序并输出,例如:你给出的参数是"abc" 则程序会输出:
  abc
  acb
  bac
  bca
  cab
  cba
  (1)算法的出口在于:low=high也就是现在给出的排列元素只有一个时。
  (2)算法的*近过程:先确定排列的第一位元素,也就是循环中i所代表的元素,
  然后low+1开始减少排列元素,如此下去,直到low=high
  public static void permute(String str) {
  char[] strArray = str.toCharArray();
  permute(strArray, 0, strArray.length - 1);
  }
  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];
  list[low] = list[i];
  list[i] = temp;
  }
  }
  }
  3。这是一个组合的例子,与上述的例子相似,只是它所做的工作是,输出所给字符串中制定数目的元素的组合种类
  (1)程序出口在于n=1,此时只要输出目标数组的所有元素即可
  (2)*近过程,当n>1 的时候,我们先取第一个元素放入目标数组中,然后n-1,如此下去,最后出来。
  import javax.swing.JOptionPane;
  public class Combination {
  /**
  * @param args
  */
  public static void main(String[] args) {
  String input = JOptionPane.showInputDialog("please input your String: ");
  String numString = JOptionPane.showInputDialog("please input the number of your Combination: ");
  int num = Integer.parseInt(numString);
  Combine(input, num);
  }
  private static void Combine(String input, int num) {
  char[] a = input.toCharArray();
  String b = "";
  Combine(a, num, b, 0, a.length);
  }
  private static void Combine(char[] a, int num, String b, int low, int high) {
  if (num == 0) {
  System.out.println(b);
  } else {
  for (int i = low; i<a.length; i++) {
  b += a[i];
  Combine(a, num - 1, b, i+1, a.length);
  b=b.substring(0, b.length()-1);
  }
  }
  }
  }

热心网友 时间:2022-05-15 01:08

/**
* 概念介绍:
* 递归是一种方法(函数)调用自已编程技术。
* 递归就是程序设计中的数学归纳法。
* 例如:tri(n)=1 if n=1
* tri(n)=n+tri(n-1) if n>1
* 可能while循环方法执行的速度比递归方法快,但是为什么采用递归呢。
* 采用递归,是因为它从概念上简化了问题,而不是因为它提高效率。
*/

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Recursion {//求三角数字的递归算法:1,3,6,10,15,21, ......

static int theNumber;

public static void main(String[] args) throws IOException {
System.out.print("Enter a number: ");
theNumber = getInt();
//使用递归时调用,默认
int theAnswer = triangle(theNumber);
//使用非递归时调用
//int theAnswer=triangle2(theNumber);
System.out.println("Result: " + theAnswer);
}

public static int triangle(int n) {//递归方法,循环调用
if (n == 1) {
return 1;
} else {
return (n + triangle(n - 1));
}
}

public static int triangle2(int n) {//非递归方法
int total = 0;
while (n > 0) {
total = total + n--;
}
return total;
}

public static String getString() throws IOException {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String s = br.readLine();
return s;
}

public static int getInt() throws IOException {
String s = getString();
return Integer.parseInt(s);
}
}

/**
* 运行结果:
* Enter a number:
* 3
* Result: 6
*/

/**
* 总结:
* 使用非递归的方式更简洁,更易懂,运行效率更高,为什么还要用递归的算法呢。
* 递归使规模逐渐降低的方式解决问题,以这种统一的方式解决足够复杂的问题。
*/
java中递归算法是什么怎么算的?

Java递归算法是基于Java语言实现的递归算法。递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法表示问题的解。递归往往能给我们带来非常简洁非常直观的代码形式,从而使我们的编码大大简化,然而递归的思维确实跟我们的常规思维相逆...

谁能说说JAVA的递归是什么意思?

递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于...

Java 算法篇-深入理解递归(递归实现:青蛙爬楼梯)

1.0 递归介绍:递归是函数自行调用自身的过程,可用于解题如斐波那契数列或计算阶乘。递归依赖两种情况:基本情况提供直接解答,递归情况分解问题到较小规模,直至终止。递归执行包括“递出”创建新栈帧直至满足停止条件,“回归”执行直至销毁所有帧。理解为问题自解过程的反复调用。2.0 递归实现示例:- *...

java 递归算法问题:(n,k)=(n-1,k-1)+(n-1,k)?

就是说 n 个里面要选 k 个,分为两组,包含 A和不包含A。包含 A : 已经包含A了,所以总数是 n-1 个了;同理,已经包含了A,所以只要选 k -1 个就可以了,所以为 (n-1,k-1)。不包含A:已经不包含A了,所以总数是 n-1 个;还是选 k个,所以为(n-1,k)。无限递归即可以了。

用java冒泡排序和递归算法

递归算法,就是程序的自身调用。表现在一段程序中往往会遇到调用自身的那样一种coding策略,可以利用大道至简的思想,把一个大的复杂的问题层层转换为一个小的和原问题相似的问题来求解的这样一种策略。能看到我们会用很少的语句解决了非常大的问题,所以递归策略的最主要体现就是小的代码量解决了非常复杂...

Java数据结构二叉树深度递归调用算法求内部算法过程详解

根据上面的二叉树代码,递归过程是:f(1)=f(2)+1 &gt; f(3) +1 ? f(2) + 1 : f(3) +1 f(2) 跟f(3)计算类似上面,要计算左右结点,然后取大者 所以计算顺序是f(4.left) = 0, f(4.right) = 0 f(4) = f(4.right) + 1 = 1 然后计算f(5.left) = 0,f(5.right) =...

Java用递归实现3.根据规律写出计算算法:1、7、8、15、23、38、61...

• 第一项是1,第二项是7,从第三项开始,每一项是前两项的和;• 因此,第三项是8,第四项是15,第五项是23,以此类推。这是一个典型的递归问题,可以通过递归算法来解决。具体实现代码如下:在上面的代码中,我们定义了一个getNumber方法,该方法接受一个整数n作为参数,返回数列中...

用java递归算法求一个数字的阶乘

递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数).3、特点:(1) 递归就是在过程或函数里调用自身。(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口...

java递归方法

param direction 递归时的方向 / public static void printStar2(int number,int oldNumber, int direction){ if(number==0)direction++;String s="";int i = number;if(direction==1){ for(;i&lt;oldNumber;i++){ s+="*";} number--;}else{ for(;i&lt;oldNumber;i++){ s+="*";} ...

用java递归算法,求1+2+4+8+~~~的和?

即f(x)=f(x-1)*2;f(1)=1;...public class Test4 { public static void main(String[]args){ System.out.println(num(10));} public static int f(int x){ if(x == 1)return 1;return f(x - 1)*2;} public static int num(int x){ if(x == 1)return f(1);return...

Java中的递归算法 什么是递归算法 递归算法经典实例java java的递归 vb递归算法经典实例 java递归详解 java排序算法 java递归教程 java递归调用
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在微信通信录里的好友点开可以看单最后一次和他发的时间吗?_百度... 为什么我刚刚在设置里面把有些应用程序的蜂窝移动网络关闭了,把设置... 在市场买的死螃蟹放冰箱冷冻了几天能吃吗?吃了会有什么问题? 腾讯会议怎么开启演讲者模式? 腾讯会议怎么设置演讲者视图? ipad屏幕尺寸在哪里看 如何准确识别iPad型号和尺寸通过轻松辨识iPad的型号和尺寸 ...我都删除了,怎么还自动提醒行程,怎么不让提醒 OPPO手机的Breeno快看如何帮助我们优化日常行程? 136×84的竖式 递归怎么理解 怎么调用 举个列子 递归怎么实现 请问递归到底是怎么一回事? 什么是递归函数? 怎样实现递归? 如何理解递归 汽车买保险应该怎么买划算? 新买的小车要怎么买保险?主要购买的哪些项目? 微信发送不了信息,图片都变成黑色的是不是封号了? 微信被封了,需要选择被封账号的头像,但是上面没有我的头像…怎么解? 微信好友被封号了,头像和朋友圈背景封面在,其他照片没有了多久可以被解 我被永久封号了。想把微信的头像换掉,改怎么做? 微信好友如果被永久封号了,我还能打开他的头像吗? 朋友的微信被封号怎么知道他是短期封号还是永久封号,头像和朋友圈背景图... 被封了,怎么才能换头像? 被封了,但是从朋友那了解到没几天自己微信的昵称和头像全变了,是不是被盗号了? 被永久封停后 头像是被封时候的头像吗?还能搜到这个微信吗? macbook air内的某些文件突然不见了,怎么恢复? mac Finder应用程序文件夹消失了找回办法 Mac电脑插上硬盘文件都能正常显示,但是用ntfs助手打开后有几个文件夹的文件不见了? MacBook Pro桌面文件夹不见了,怎么回事 什么是递归,用Java怎么实现? 数据结构中的二叉树中的递归怎么理解? 递归是怎么一回事?哪位老师能否通俗易懂的讲讲原理? 递归怎么样理解 C语言递归算法是怎么执行的 什么是递归函数,递归函数是怎样执行的 大家怎么理解递归的 如何计算递归 java中的递归方法是怎么样的?请举例解析一下 类似于maka.im的在线制作网站有哪些? 怎么样去理解递归函数 哪里有在线制作网页的网站? 如何学习递归 如何搭建一个在线的类似夺目的在线视频制作网站? 怎么制作一个网页商城 毕业短视频动画制作有什么可以在线制作网站推荐? 有没有自己可以做动画的在线动画制作网站?初学者一枚 行测,公共基础,有没有在线做题的网站? 动画制作在线网站用哪些? 哪有在线做数学题的网站