黑马程序员-递归

---------------------- android培训 、 java培训、期待与您交流! ----------------------

 递归  是指在方法调用的过程中调用该方法自身的调用。 一般用在类似Fibonacci函数  树状结构的应用程序当中。

例如下面这个例子:求数列 1 ,1,2,3,5,8,13.......第n个数列的值

 

public class UserTest {

 public static void main(String[] args) {
  System.out.println(method(6));
 }

 private static int method(int i) {
  if(i == 1||i==2) return 1;
  
  else
  return method(i-1)+method(i-2);
 }

}

 

这就是一个简单的递归程序,其调用过程为:method(6)的 method(i-1)的调用过程:method(6)—method(5)—method(4)—method(3)—method(2),method(2)返回,调用method(1)—method(1)返回—method(3)调用完返回method(4)—调用method(4)的method(2)—method(2)返回—method(4)调用完返回method(5)—调用method(5)的method(3)—method(3)返回—method(5)调用完返回method(6),再执行method(6)的method(i-2)过程,与前面过程类似。最后method(6)调用完返回main()。

这是一个Fibonacci函数 形式递归。合理利用递归,会使我的程序变得简洁高效。

 

当然上述程序也可以用普通方法实现,以下为实现方式:

首先分析数列规律:第n个数的值为n-1个数和n-2个数的值的和,所以我们设局部变量num1和num2 储存这两个数  numSum储存他们的和

 

private static long number(int i){
  if(i==1||i==2) return 1;
  
  long num1=1L;
  long num2=2L;
  long numSum=0;
  for(int j =1;j<i-2;j++){

//每次循环,把n-1那个数的值赋给n-2那个数的值,他们的和赋给n-1那个数的值
   numSum=num1+num2;
   num1=num2;
   num2=numSum;
   
   
  }
  
  return numSum;
 }

通过对比,可以发现递归方式实现起来简单很多。

 

---------------------- android培训 、java培训 、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值