您的位置:首页 > 其它

程序流程你真的懂了吗?

2015-08-23 11:22 169 查看
小白最近在学习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千里。告诫自己以后做事还要步步为营,踏踏实实才是!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: