练练递归与尾递归

    之前看了一篇文章,搜索学了一下尾递归。刚才突然想起递归和它相反的一个递归,却忘了名字。又是一阵搜索,终于看到了,为了防止忘记,所以记录一下。
    递归,大家都很熟了吧。用的好的话,威力挺大的。突然就想到了之前工作中遇到的一个业务,在微信中调用微信api上传图片:能够拍照和选取手机中的图片,并能够上传到服务器。结果却发现微信的上传图片到服务器是异步的,js中的异步很正常,可关键是一次只能传一张,这就不好办了。解决办法网上许多,这里先言归正传,说一下递归与尾递归。
    递归,大学时老师讲的,就是镜中镜的效果,自己不断的调用自己,走到终点了,再把结果依次向上返回。那么尾递归又是怎么一回事呢?从名字可以看出,和递归的操作是反着来的。递归是从外往里执行,再把结果向外一层一层返回,类似栈。但是尾递归,是直接从外向里执行,然后直接返回结果。总结来说,尾递归是基于我们已经知道终点是什么了。
下面上代码:
 
  


package cn.ourpass.recurse;




/**


 * 递归学习 


 * @author simple


 *


 */


public class RecurseTest {




    public static void main(String[] args) {


        int total = recurseAdd(20);


        System.out.println(total);


        


        int total2 = tailRecurseAdd(0, 20);


        System.out.println(total2);


    }




    /**


     * 递归计算正整数和


     * @param num


     * @return


     */


    public static int recurseAdd(int num) {


        if(num == 1) {


            return 1;


        } else {


            return num + recurseAdd(num -1);


        }


    }


    


    /**


     * 尾递归计算正整数和


     * @param total


     * @param num


     * @return


     */


    public static int tailRecurseAdd(int total, int num) {


        if(num == 1) {


            return total + 1;


        } else {


            return tailRecurseAdd(total + num, num - 1);


        }


    }


}





--感谢互联网上的各位大神
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值