2、递归算法一般用于解决三类问题:
1)数据的定义是按递归定义的。(Fibonacci(斐波那契)的函数)
2)问题解法按递归算法实现。(回溯)
3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)
Java方法递归是指在一个方法的内部调用自身的过程,以此类推就是java方法递归的理解思想,具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。因此,java方法递归的两个条件就是,一通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式;二存在一种简单情境,可以使递归在简单情境下退出。按照你的要求编写的Java递归程序如下:
import java.util.Scannerpublic class GGG {
public static void main(String[] args) {
int N = 0
Scanner sc=new Scanner(System.in)
int num=sc.nextInt()
for(int n=0n<numn++){
N=sc.nextInt()
int a[]=new int[N]
for(int i=0i<a.lengthi++){
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=2i<numi++){
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)