2014年1月27日星期一

递归(Recursion)

递归调用:

例子:阶乘

public class Test {
          public static void main(String args[]) {
             System.out.println(method(5));
}
          public static int method (int n) {
             if (n==1)  return 1;
             else return n*method(n-1);
}
}

注意在else return n*method(n-1); 是调用方法的自身,所以如果method(3) 那么当执行method(3)的时候,那就会返回3×method(2),此时这个新的式子会等待method(2)的返回,而method(2)= 2*method(1),等待method(1)的返回,所以递归就是这样形成的。

例子二:Fibonacci 数列
public class Test{
   public static void main(String args[]) {
    System.out.println(f(5));
   }
 
   public static int f(int n) {
    if(n==1 || n==2) return 1;
else return f(n-1)+f(n-2);
   }
}

运用递归的关键:找到调用自身的方法, 并且设置返回值

运用非递归的方法(for loop)的方法写Fibonacci 数列:
public class test {
     public static void main(String args[]){

float f1=1;
float f2=1;
float f=0;
int i;

Scanner scanner=new Scanner(System.in);
System.out.println("Enter the Fibonacci number:");
float number=scanner.nextFloat();
if(number==1 || number==2)
   return 0;
else
       for(i=0;i<number-2;i++) {
f=f1+f2;
f1=f2;
f2=f;
   }

return f;


}





没有评论:

发表评论