按照你的要求编写的Java递归程序如下:
import javautilScanner;public class GGG {
public static void main(String[] args) {
int N = 0;
Scanner sc=new Scanner(Systemin);
int num=scnextInt();
for(int n=0;n<num;n++){
N=scnextInt();
int a[]=new int[N];
for(int i=0;i<alength;i++){
a[i]=scnextInt();
}
Systemoutprint("case "+(n+1)+":");
process(a,0);
Systemoutprintln();
}
}
private static void process(int[] a, int n) {
if(n==0){
if(isPrime(a[n+1]))
Systemoutprint(1+" ");
else
Systemoutprint(0+" ");
}else if(n==alength-1){
if(isPrime(a[n-1]))
Systemoutprint(1+" ");
else
Systemoutprint(0+" ");
return;
}else{
if(isPrime(a[n-1])&&isPrime(a[n+1]))
Systemoutprint(2+" ");
else if(isPrime(a[n-1])||isPrime(a[n+1]))
Systemoutprint(1+" ");
else
Systemoutprint(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
递归的主要方法是什么?
一、递归算法
递归算法(英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。计算理论可以证明递归的作用可以完全取代循环,因此在很多函数编程语言(如Scheme)中习惯用递归来实现循环。
二、递归程序
在支持自调的编程语言中,递归可以通过简单的函数调用来完成,如计算阶乘的程序在数学上可以定义为:
这一程序在Scheme语言中可以写作:
1
(define (factorial n) (if (= n 0) 1 ( n (factorial (- n 1)))))
不动点组合子
即使一个编程语言不支持自调用,如果在这语言中函数是第一类对象(即可以在运行期创建并作为变量处理),递归可以通过不动点组合子(英语:Fixed-point combinator)来产生。以下Scheme程序没有用到自调用,但是利用了一个叫做Z 算子(英语:Z combinator)的不动点组合子,因此同样能达到递归的目的。
1
(define Z (lambda (f) ((lambda (recur) (f (lambda arg (apply (recur recur) arg)))) (lambda (recur) (f (lambda arg (apply (recur recur) arg)))))))(define fact (Z (lambda (f) (lambda (n) (if (<= n 0) 1 ( n (f (- n 1))))))))
这一程序思路是,既然在这里函数不能调用其自身,我们可以用 Z 组合子应用(application)这个函数后得到的函数再应用需计算的参数。
尾部递归
尾部递归是指递归函数在调用自身后直接传回其值,而不对其再加运算。尾部递归与循环是等价的,而且在一些语言(如Scheme中)可以被优化为循环指令。 因此,在这些语言中尾部递归不会占用调用堆栈空间。以下Scheme程序同样计算一个数字的阶乘,但是使用尾部递归:
1
(define (factorial n) (define (iter product counter) (if (> counter n) product (iter ( counter product) (+ counter 1)))) (iter 1 1))
三、能够解决的问题
数据的定义是按递归定义的。如Fibonacci函数。
问题解法按递归算法实现。如Hanoi问题。
数据的结构形式是按递归定义的。如二叉树、广义表等。
四、递归数据
数据类型可以通过递归来进行定义,比如一个简单的递归定义为自然数的定义:“一个自然数或等于0,或等于另一个自然数加上1”。Haskell中可以定义链表为:
1
data ListOfStrings = EmptyList | Cons String ListOfStrings
这一定义相当于宣告“一个链表或是空串列,或是一个链表之前加上一个字符串”。可以看出所有链表都可以通过这一递归定义来达到。
如n!=n(n-1)!
你定义函数f(n)=nf(n-1)
而f(n-1)又是这个定义的函数。。这就是递归。
实现递归。简单说来从未知的推到已知的
如:3!=32!
2!=21!
1!=1(已知的)
以上就是关于JAVA这道题要如何用递归实现呢,求大神全部的内容,包括:JAVA这道题要如何用递归实现呢,求大神、递归主方法、递归过程可以用什么结构实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)