您的位置:首页 > 其它

递归算法--如何一步一步理解递归(1)

2017-09-06 18:28 239 查看

递归:

概念:

递归算法是吧问题转化为规模缩小了的同类问题的子问题。然后递归调用函数来表示问题的解。

简单的说就是函数自己自己的过程。

如何设计递归算法:

–>确定递归公式

–>确定结束条件

递归的一般模式:

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  递归算法 阶乘