递归:
概念:
递归算法是吧问题转化为规模缩小了的同类问题的子问题。然后递归调用函数来表示问题的解。
简单的说就是函数自己自己的过程。
如何设计递归算法:
–>确定递归公式
–>确定结束条件
递归的一般模式:
procedure aaa(k:integer);
begin
if k=1 then (边界条件及必要操作)
else begin
aaa(k-1);
(重复的操作);
end;
end;
通过案例理解:
- 阶乘:
阶乘公式:
n! = n * (n-1) * (n-2) * ...* 1(n>0)
核心代码:
public int recursive(int i){
int sum = 0;
if (0 == i)
return (1);
else
sum = i * recursive(i-1);
return sum;
}
具体代码实现:
public class demo1 {
public static int recursive(int i){
int sum = 0;
if (0 == i)
return (1);
else
sum = i * recursive(i-1);
return sum;
}
public static void main(String[] args) {
int sum=recursive(3);
System.out.println(sum);
}
}
运行结果:
6
代码解读:
按照我现在的理解,引入一个方法入栈的概念:
下面的这个图中,就是表示的是方法入栈的顺序:我们从main方法开始程序,main进入栈当中,然后按照我下面的截图,我们可以发现,进入栈的顺序依次是:recursive(3);
–>recursive(2);
–>recursive(1);
–>recursive(0);
当运行到recursive(0);
的时候,由于if (0 == i) return (1);
所以recursive方法返回1,这个时候,然后我们的方法是不是要依次出栈了?
所以–>
所以最后的结果输出为6.