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)
*/
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);
}
}
}
递归执行顺序图:
非递归 计算:
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;
}
}