黑马程序员---递归

 

 

 

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

 public static int method(int n)
 {
  if(n == 1)
   return 1;
  else 
   return n*method(n-1);
 }
}


 递归就是 方法调用自身的方法 
     上面代码递归执行原理:进入main函数,调用method方法
  method(3)  把3传递给mthod方法的行参n,3不等1  执行else
  等着 3*method(3-1) 返回  在这当中回调用  method(2) 
  接着还是调用method本身的方法 把2传递给行参n   2不等于1  执行else 2*method(2-1)
  等着 2*method(2-1) 返回  在这当中又调用了  method(1)
  1==1  method(1) 返回,1
        method(2) 返回,2
     method(3) 返回,3        结果1*2*3=method(3)  运算结果是:6
    main函数继续往下执行.程序结束.

 

 

/*
递归调用指在方法执行过程中出现该方法本身的调用
例如: 求数列  1,1,2,3,5,8,.....第40个数的值. 数列满足递归推公式
F1 =1 , F2 =2    Fn = Fn-1 +Fn-2  (n>2)
*/

/*
递归调用指在方法执行过程中出现该方法本身的调用
例如: 求数列  1,1,2,3,5,8,.....第40个数的值. 数列满足递归推公式
F1 =1 , F2 =2    Fn = Fn-1 +Fn-2  (n>2)
*/

public class DiGui
{
	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);
		}
	}
}

递归执行顺序图:


 

非递归 计算:

/*
例如: 求数列  1,1,2,3,5,8,.....第40个数的值.

*/

public class DiGui
{
	public static void main(String[] args)
	{
		 System.out.println(f(5));
	}
	public static long f(int index)
	{
		if(index == 1 || index == 2)
		{
			return 1;
		}

			//用3个变量记录前3个数的值
			long f1=1L;
			long f2=1L;
			long f=0;

					 //前5个数相加,遍历3次即可
		for(int i=0; i<index-2; ++i)
		{
			//前3个数相加
			f=f1+f2;

			//第2个数赋给第一个位置
			f1=f2;

			//第3个数赋给第二个位置
			f2=f;
		}
		return  f;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值