java函数的回调与递归

一、函数回调

1.把函数的指针,当做函数的参数来调用。调用参数的时候,相当于调用函数。这就是函数的回调

math函数传入cc与dd参数

  function math (num1,num2,fun) {
     return fun(num1,num2)
  }

  math(1,2,cc)
  math(2,3,dd)
  function bb (num1,num2) {
    return (num1+num2)*2-1
  }
  function cc (num1,num2) {
    return (num1-num2)*2-1
  }
  math(3,4,cc)
 function cc () {
 }

2.通过匿名的调用

上面是调用函数的指针,直接用匿名函数代替。

math(2,3,function  (num1,num2) {
 return (num1+num2)*3-1
})

3.定义和执行同时进行

括号的两个作用1,优先级运算。2.运行函数

((function aa (num1,num2,fun) {
        return fun(num1,num2)
    })(2,3,function  (num1,num2) {
     return (num1+num2)*2
   }))

所有的事件函数都可以传入event参数方便处理事件。(event object) 对象,内置的回调函数接口

$("p").click(function(event){  
 alert(event.type); //"click"  
}); 

(evnet object)属性方法:
event.pageX   //事件发生时,鼠标距离网页左上角的水平距离
event.pageY   //事件发生时,鼠标距离网页左上角的垂直距离
event.type   //事件的类型
event.which   //按下了哪一个键
event.data   //在事件对象上绑定数据,然后传入事件处理函数
event.target  //事件针对的网页元素
event.preventDefault()  //阻止事件的默认行为(比如点击链接,会自动打开新页面)
event.stopPropagation()  //停止事件向上层元素冒泡

二、递归

递归就是方法自己调用自己

实现递归的三要素

1.方法中出现自己调用自己

2.要有分支

3.要有结束条件

非递归求阶乘

	static long notDigui(int n){
		long result=1;
		for(int i=1;i<=n;i++){
			result=result*i;
		}
		return result;
	}

递归方法求阶乘

static long digui(int n){
		if(n==1){
			return 1;
		}
		return n*digui(n-1);
	}
	
	public static void main(String[] args) {
		System.out.println(Demo03.notDigui(5));  // 1*2*3*4*5
		System.out.println(Demo03.digui(5));
	}
  function bb (num) {
    if(num==1){
	  return num;
	}else{
	  return num*bb(--num)
	}

  }

bb(4)
4*3*2*1

对于for或者while循环,只是将重复的步骤利用循环来处理,循环处理完一个步骤后,又进行下一个类似的步骤,关键点是要找出循环的依据和各步骤的相同点(既要循环的部分),什么情况下要继续循环,什么情况下要终止循环。

while循环

public int sumByMax(int max){
        int result=0;
        while(max>=1){
            result+=max;
            max--;
        }
        return result;
}

递归

public int sumByMax(int max){
        if(max>=2){
            return max+sumByMax(max-1);
        }else{
            return max;
        }
}

使用递归时,需先找出重复步骤之间的相同逻辑,然后将这些逻辑实现在一个方法中。 
递归是在进行一个步骤,进行到某处时,通过调用自身进行分层,在下一层开始紧接着的下一个步骤, 
如果下一层不是定义的最后一层,则会在相同的地方再次分层,直到进入最底层,如上例中,max如果 
为5,在进行max为5的这一层操作时,将会运行addByMax(4),分层,下一层的max将为4,此时因为定义了max为1时 
才为最底层,所以会继续分层,这时max为3,再分,为2,再分,为1,到达最底层,然后 
从最底层开始将各层的结果一次向上传递,回归到最顶层,返回最终结果,形成上一层调用下一层,比如此例中的 max+addByMax(max-1) 。
最后注意定义一个最底层,即开始向上回归结果的那一层,最底层将不再调用自身进行递归

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wespten

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值