JAVA这道题要如何用递归实现呢,求大神

最不会的就是递归了。。。。有人帮帮忙,提供一下递归的思路吗

按照你的要求编写的Java递归程序如下:

import java.util.Scanner;

public class GGG {

 public static void main(String[] args) {

  int N = 0;

  Scanner sc=new Scanner(System.in);

  int num=sc.nextInt();

  for(int n=0;n<num;n++){

   N=sc.nextInt();

   int a[]=new int[N];

   for(int i=0;i<a.length;i++){

    a[i]=sc.nextInt();

   }

   System.out.print("case "+(n+1)+":");

   process(a,0);

   System.out.println();

  }

 }

 private static void process(int[] a, int n) {

  if(n==0){

   if(isPrime(a[n+1]))

    System.out.print(1+" ");

   else

    System.out.print(0+" ");

   

  }else if(n==a.length-1){

   if(isPrime(a[n-1]))

    System.out.print(1+" ");

   else

    System.out.print(0+" ");

   return;

  }else{

   if(isPrime(a[n-1])&&isPrime(a[n+1]))

    System.out.print(2+" ");

   else if(isPrime(a[n-1])||isPrime(a[n+1]))

    System.out.print(1+" ");

   else

    System.out.print(0+" ");

  }

  process(a,n+1);

 }

 public static boolean isPrime(int num) {

  int i;

  for(i=2;i<num;i++){

            if(num%i==0)

            break;

         }

       if(i==num){

        return true;

       }

       return false;

 }

}

运行结果:

2
5
5 7 2 9 13
case 1:1 2 1 2 0
3
10 4 5
case 2:0 1 0

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-05-06
class Judge
{
public static int prim(int b[],int n)
{

int flag=1;
for(int i=2;i<=Math.sqrt(b[n]);i++)
{
if(b[n]%i==0)
{
flag=0;
}
}
return flag;
}
}

public class PrimGet {

public static void main(String[] args) {
int [] a={5,7,2,9,13};
//遍历出a[]中元素是否为素数
for(int i=0;i<a.length;i++)
{
System.out.print(Judge.prim(a, i)+" ");
}
System.out.println();
for(int i=0;i<a.length;i++)
{
if(i==0)
{
System.out.print(Judge.prim(a,i+1)+" ");
}else if(i==a.length-1)
{
System.out.print(Judge.prim(a,i-1));
}else
{
System.out.print(Judge.prim(a, i-1)+Judge.prim(a,i+1)+" ");
}
}
}
}

第2个回答  2016-05-06
import java.util.*; // in order to use the Set and Stack collections.
public class Anagrams {

private static String[] letters;

/**
* Anagrams, the constructor, initializes a new anagram solver over the given dictionary
* of words, and throws an IllegalArgumentException if the set passed is null.
* @param dictionary
*/
public Anagrams(Set<String> dictionary){
if(dictionary == null)
throw new IllegalArgumentException();
letters = dictionary.toArray(new String[0]);
}

/**
* getWords method returns a set containing all words from the dictionary that can be made
* using some or all of the letters in the given phrase, in alphabetical order, and throws
* an IllegalArgumentException if the set passed is null.
* @param phrase
* @return
*/
public Set<String> getWords(String phrase){
if(phrase == null)
throw new IllegalArgumentException();
Set<String> words = new TreeSet<String>();
LetterInventory phraseLetter = new LetterInventory(phrase);
for(String letter : letters){
if(phraseLetter.contains(letter)){
words.add(letter);
}
}
return words;
}

/**
* This first print method uses recursive backtracking to find and print all
* anagrams that can be formed using all of the letters of the given phrase,
* and throws an IllegalArgumentException if the set passed is null.
* @param phrase
*/
public void print(String phrase){
print(phrase, 0);
}

/**
* This second print method uses recursive backtracking to find and print all anagrams
* that can be formed using all of the letters of the given phrase and that include at
* most max words total, and throws an IllegalArgumentException if the set passed is null.
* @param phrase
* @param max
*/
public void print(String phrase, int max){
if(phrase == null || max < 0)
throw new IllegalArgumentException();
LetterInventory phraseLetter = new LetterInventory(phrase);
Stack<String> chosen = new Stack<String>();
String[] choices = getWords(phrase).toArray(new String[0]);
print(phraseLetter, chosen, choices, max);
}

/**
* This third print method is the basic recursive method of the two print methods above.
* @param phrase, the phrase that the user typed in.
* @param chosen, a collection of the words that are chosen to form the phrase using part
* of letters of the given phrase.
* @param choices, an String array that contains all the possible words that can be used
* to form the given phrase.
* @param max
*/
private static void print(LetterInventory phrase, Stack<String> chosen,String[] choices,int max){
if(phrase.isEmpty()){ //base case
System.out.println(chosen);
}else{ // recursive case
for(int i = 0; i<choices.length;i++){
if(phrase.contains(choices[i]) && (chosen.size() < max || max == 0)){
phrase.subtract(chosen.push(choices[i]));// choose
print(phrase, chosen, choices, max);// explore
phrase.add(chosen.pop());// backtrack.
}
}
}
}追问

没看懂。。。我复制到我的eclipse上找不到LetterInventory

java递归是什么意思?怎么用?通过案例来身临其境的学习java递归
假设洗脸的步骤可以简化为:打湿、涂洗面奶、冲洗和擦干。将这个流程用Java函数表示,每次调用一个递归函数,顺序执行洗面步骤直至完成。该例子展示,递归函数能清晰地模拟自然语言描述的过程,使代码更容易理解。然而,重要的是确保正确的递归退出条件,防止无限递归引发堆栈溢出。接下来,我们讨论楼梯爬升问题。

Java用递归实现3.根据规律写出计算算法:1、7、8、15、23、38、61...
这是一个典型的递归问题,可以通过递归算法来解决。具体实现代码如下:在上面的代码中,我们定义了一个getNumber方法,该方法接受一个整数n作为参数,返回数列中第n位的值。在该方法中,我们使用了递归算法,把求第n位的值转化为了求第n-1位和第n-2位的和。其中,第一项的值为1,第二项的值为7。

java递归是什么意思?怎么用?通过案例来身临其境的学习java递归
想象每天早晨的洗脸过程:首先打湿脸(washFace()调用wetFace()),然后涂洗面奶(applyCleanser()),再冲洗干净(rinseOff()),最后擦干(dryFace())。这个过程就像递归函数,基本结构是递归调用这四个步骤,直到达到结束条件。递归使代码更具可读性,如washFace()递归调用其他函数来完成洗脸。另一个...

用java递归方法实现
1、递归做为一种算法在程序设计语言中广泛使用,是指函数\/过程\/子程序在运行过程中直接或间接调用自身而产生的重入现象。2、递归算法一般用于解决三类问题:1)数据的定义是按递归定义的。(Fibonacci(斐波那契)的函数)2)问题解法按递归算法实现。(回溯)3)数据的结构形式是按递归定义的。(树的遍历...

JAVA程序经常用到“递归”,“递归”的基本思想是
递归的核心思想是分解。把一个很复杂的问题使用同一个策略将其分解为较简单的问题,如果这个的问题仍然不能解决则再次分解,直到问题能被直接处理为止。比如求 1+1\/2+1\/3+...+1\/n的和,如果按照我们正常的思维,就会使用一个循环,把所有的表示式的值加起来,这是最直接的办法。如果使用递归的...

java递归,问题。请问这2个方法什么意思,我怎么就不明白递归的原理,求...
你的程序里面的:public static int getSum(int n){ if(n==1) return 1;return n + getSum(n-1);} 这一段程序就是一个递归调用的程序,其功能是实现从1到n的连加运算。其计算过程是:假如主函数里调用getSum时的参数为50,(计算1到50的连加)第一次:50 与 getSum(49)的结果之和...

详解Java递归(Recursion)通过递归解决迷宫回溯及八皇后问题
\/** * 使用递归回溯来给小球找路 * @param map 表示地图 * @param i j 从那个位置开始找 * @return 如果找到通路,就返回true,否则返回false * 如果小球能到 map[6][5]位置,则说明通路找到了 * 约定:当map[i][j] 为0表示该点没有走过当为1表示墙。如果为2表示通路可以走,3表示该...

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

java中递归的作用是什么?为什么要用到递归?
你的两个问题其实是一个问题,对吧。递归的作用:递归算法可以解决一些通过递归定义的题目。首先需要明白什么是递归定义的题目,通俗一点来说就是一个大问题中蕴含着小问题,而小问题同时又与大问题的结构相同,只是规模更小。比如n阶乘的定义可以理解为:n!= n*(n-1)!从上面不难看出 (n-1)!

java二分法查找的递归算法怎么实现
则输出该数据在数组中的索引;如果不存在则输出 -1 ,也就是打印 -1 则该数在数组中不存在,反之则存在。四、利用递归的方式实现二分法查找 public class BinarySearch2 {public static void main(String[] args) {\/\/ 生成一个随机数组 int[] array = suiji();\/\/ 对随机数组排序 Arrays....

相似回答