回调函数和递归函数
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都用到回调机制,可以访问远程服务器程序。
回调函数也就是这个意思了。