A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 BOOM 于 2014-7-13 21:19 编辑

函数回调怎么用啊,完全看不懂,就解释

11 个回复

倒序浏览
你是指递归调用还是?
回复 使用道具 举报
也就是递归调用吧,别如说这个,求1 + 2  + 3 + ...+n 和,用函数回调实现
回复 使用道具 举报
也就是递归调用吧,别如说这个,求1 + 2  + 3 + ...+n 和,用函数回调实现
回复 使用道具 举报
比如这个 #include <stdio.h>

int sum(int i)
{
    if (i == 1) {
        return 1;
    }
    return sum(i - 1) + i;
}

int main(int argc, const char * argv[])
{
   
    int result = sum(3);
    printf("result = %d\n",result);
    return 0;
}
回复 使用道具 举报
BOOM 发表于 2014-7-12 21:38
比如这个 #include

int sum(int i)

递归,关键是把问题分解为规模较小但与原问题结构相同的子问题。比如设s(n) = 1+2+...+n。那么s(n)=(1+2+...+n-1) + n= s(n-1) + n,这就是return  sum(i - 1) + i;这条语句背后的思路。再比如递归算阶乘。设
f(n)=1*2*...*n,那么f(n)=(1*2*....*(n-1)) * n=f(n-1)*n,相应的递归语句就是:return f(n-1) * n
回复 使用道具 举报
给你举个例子吧,猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第一天共摘多少个桃子。
  这个例子如果用回调函数,那先要确定几个思路:
1 猴子猜的桃是一个未知数,但是我们知道的是:到第10天的时候,桃子还剩下1个
2 每天都会吃掉前一天的一半零一个,那就是n=n/2+1,因为我们知道了第十天的剩余量,所以我们可以倒着来计算
  第十天的量,n为桃子的总数量。n=(n+1)+1*2;
那利用回调函数就是
int fun(int n){
   
    if (n == 10) {
        return 1;
    }
    return (fun(n +1) + 1 ) * 2;
}

然后在main函数中再进行调用就可以。

其实回调函数你只需要确定两个意思就可以。
1、找出fun(n) 与 fun(n -1)、fun(n - 2) 之间的关系,如果找不到这样的关系,就说明它不可以使用回调函数
2、确定什么时候返回一个确定值
回复 使用道具 举报
mybdgw 初级黑马 2014-7-12 22:56:47
8#
今天上课讲的。。就是递归调用。。
回复 使用道具 举报
递归主要就是找规律
回复 使用道具 举报
如果说递归的话,好好了解一下循环,递归就是一个一个循环的过程!
回复 使用道具 举报
递归有点像高中数学的数列,数列概念理解,这个就没啥问题。
回复 使用道具 举报
递归就是自己搞自己,关键要确定好结束条件和返回值模型
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马