Thursday, February 26, 2009

递归

Recursion 是在方法中调用自身同名方法,而调用者本身会先被置入内存堆栈中,等到被调用者执行完毕之后,再从堆栈中取出之前被置入的方法继续执行。

辗转相除法求最大公因子:
package Encapsulation;
import java.util.Scanner;
public class TestRecursion {

public static void main(String[] args) {
Scanner s=new Scanner(System.in);

System.out.println("输入两个数:");
System.out.print("m= ");
int m=s.nextInt();
System.out.print("n= ");
int n=s.nextInt();

System.out.println("GCD: "+gcd(m,n));

}

private static int gcd(int m,int n){
if(n==0)
return m;
else
return gcd(n,m%n);

}

}




可以使用递归求解的程序,实际上也可以用循环来求解。
由于递归本身有重复执行与内存堆栈的特性,所以若在求解时需要使用到堆栈性的数据结构时,使用递归在设计的逻辑会比较容易理解,程序代码设计出来也会比较简洁。然而递归会有方法调用的负担,因而有时会比使用循环求解时效率低,但循环求解时若使用到堆栈,通常在程序代码上会比较复杂。

No comments:

Post a Comment