代码改变世界

回调函数和递归函数

2012-06-13 16:27  xiangfeipy  阅读(754)  评论(0编辑  收藏  举报

      其实这两种函数没什么关系,只是对它们不是很了解,所以拿过来对比一下。

      编程语言中,把直接或间接地调用自身的函数称为递归函数。函数的构建通常需要一个函数或者一个过程来完成。一个含直接或间接调用本函数语句的函数被称之为递归函数,它必须满足以下两个条件:

  1) 在每一次调用自己时,必须是(在某种意义上)更接近于解;

  2) 必须有一个终止处理或计算的准则。

 以求n!为例:

  ①写出迭代公式:n!的迭代公式为

  ②确定递归终止条件:1!=1就是递归终止条件

  ③将①②翻译成代码:将迭代公式等号右边的式子写入return语句中,即return (fact(n-1))*n;

  将1!=1翻译成判断语句:if(n==1) return 1;

  按照先测试,后递归的原则写出代码。

public static int facter(int n) {
if (n == 1) {
return 1;
}

return (facter(n - 1)) * n;

}

回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数。例如Win32下的窗口过程函数就是一个典型的回调函数。一般说来,C不会自己调用B,C提供B的目的就是让S来调用它,而且是C不得不提供。由于S并不知道C提供的B姓甚名谁,所以S会约定B的接口规范(函数原型),然后由C提前通过S的一个函数R告诉S自己将要使用B函数,这个过程称为回调函数的注册,R称为注册函数。Web Service以及Java的RMI都用到回调机制,可以访问远程服务器程序。

回调函数也就是这个意思了。