程序流程你真的懂了吗?

小白最近在学习javaSE课程,参见的当然老马的视频了,看补充的递归视频某一节,马士兵让学生画出程序执行的流程图。因为自己前期有学习C基础,所以觉得流程图简单啊,遂没有动手去画,可是后来才发现自己并不是真的懂流程控制。

/*
    2015年8月23日10:09:26
    递归调用举例:Fibonacci数列
*/

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

先啰嗦的解释下这个流程控制,然后附图,最后总结自己不足。

解释:这段代码的类名叫Fab,其中有一个启动类main方法,调用f()方法并且返回f(5)的值,然后打印出来。具体到f()方法是:如果n等于1或者2,就返回1,否则返回f(n-1) + f(n-2).因为f(5)中n=5,所以返回f(4)+f(3),重点来了,此刻先处理且只处理f(4),f(4)又继续f(3)+f(2),重点又来了,此刻先处理且只处理f(3),f(3)返回的是f(2)+f(1),好了。f(2)中n=2,返回值是1,此刻才开始处理f(1),返回的也是1,f(3)的值是f(2)+f(1)=2,然后才返回f(3)的值,f(3)返回后开始计算f(4)= f(3)+f(2)中的f(2),当然等于1,所以f(4)=3;继续计算f(5)=f(4)+f(3)中的f(3)了,调用f(3)=f(2)+f(1),得到f(3)=2,到此,f(5)的值算出来了,等于f(4)+f(3)=3+2=5.最后就是把f(5)的值返回给main函数,打印出答案等于5.至此程序运行结束。ps:上述写的有点啰嗦,可能看的有点吃力,老马ppt的图是很给力的。

附图:见后面

总结:有些事情,总觉得自己会了,可是真做起来,又是另一码事了。想起我们合肥十中高中数学老师的一句话:知道和懂之间 差 10万8千里 ,懂和会做之间 差 10万8千里,会做和做出来之间 差 10万8千里, 做出来和做对之间 差 10万8千里。告诫自己以后做事还要步步为营,踏踏实实才是!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值