查看: 2209|回复: 4
收起左侧

[评测] 递归函数调用的形象解释

[复制链接]
田纳西
发表于 2011-4-8 00:14:35 | 显示全部楼层 |阅读模式
本帖最后由 田纳西 于 2011-4-8 00:37 编辑

递归函数调用的形象解释

对于初学编程的人来说是比较难的,因为它有点逆向思维的意思,论坛上lpgo同学就在学java时遇到的困难。回复里讲解比较困难而且不容易讲清楚,所以我单独开一个帖子,把这个问题说明白。

先把源程序贴出来:

public class xunhuan {
        public static void main(String arge[]){
                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);
                }
        }
}
        

我这个帖子主要是解释递归函数的调用过程,至于理解本帖所需要的基本知识,面向对象的基本概念(类、对象、方法),java的语法,我都默认各位已经有基础了,如果看贴的其他同学有谁不懂,可以参看java有关资料,就基本概念在任何资料上都有介绍。

在这个程序中, xunhuan类中的main函数(方法)中的输出语句调用了这个类中的另一个静态方法int f(int n),这个函数的作用,是求非波拉锲数列中的第n项的值。

现在想象你是一家工厂的老板,你这工厂就是专门计算波拉锲数列的值来赚钱(卖给土著),现在有个客户要求计算f(5)的值(源程序是40,太大了,改小点好讲。于是你就命令总调度(假设是总经理),给我计算f(5)的结果出来。但你这工厂只有计算f(1)和f(2)的机器,现在要求f(5),怎么办呢?

总经理一看计划表,原来求f(5)先求f(4)和f(3)就可以,于是就吩咐两个手下的调度人员(假设是经理),一个求f(4),另一个求f(3),求f(3)的经理窃喜,虽然他不能直接求出f(3),但是,f(1)和f(2)是可求的,于是他又派两手下(假设是两主管),计算f(1)和f(2),结果很快出来,两报告说都是1,他一汇总求和得到2,就去找总经理报告了.

求f(4)的哥们就比较倒霉了,他一看,要求f(4),就要求f(3)和f(2),这f(2)好求啊,f(3),直接求不出,还要求f(2)和f(1),麻烦。不管了,我是经理,这种小事还要我算,派两主管,一个求f(3),另一个求f(2).他手下求f(2)的人返回结果1,求F(3)的人,心想这么复杂的东西,还要我堂堂主管出马,再派两人(假设是职员)去求f(2)和f(1),职员返回两个1给主管,汇总之后得到2,他报告给求f(4)的经理,经理根据两个主管的反馈结果得到1+2=3,他把结果返回给总经理。

总经理根据两经理反馈的结果求和得到f(5)=2+3=5,于是他像你交差,说f(5)=5,你再向客户交差。这就是整个递归过程,层层下派,层层返回,汇总后得到结果。

顺便一说,递归是函数嵌套调用的一种,不过反复调用自身罢了。就像上文中各级调度人员都是使用同一张工作计划表。

评分

参与人数 1经验 +10 收起 理由
sadfish5 + 10 版区有你更精彩: )

查看全部评分

li13911
发表于 2011-4-8 00:33:05 | 显示全部楼层
C语言基础必过的一关
sadfish5
发表于 2011-4-9 03:04:55 | 显示全部楼层
不知道求助的本人有没有看到这个文章
wowuyanle
发表于 2011-4-9 10:16:34 | 显示全部楼层
好生动形象的解释
sadfish5
发表于 2011-4-9 16:43:59 | 显示全部楼层
wowuyanle 发表于 2011-4-9 10:16
好生动形象的解释

呵呵,我也是这样觉得,,连不懂编程的人都能看懂程序的运算方式~~~
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-3-29 19:32 , Processed in 0.138349 second(s), 18 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表