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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© archdem1 中级黑马   /  2015-8-6 23:10  /  1696 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题如下 求5的阶乘。
用for实现如下:
int jiecheng(int J_jiecheng){  
     if (J_jiecheng==0) return J_jiecheng;
    for (int count = J_jiecheng - 1; count != 1 ; count--) {
        J_jiecheng = count * J_jiecheng;
    }
    return J_jiecheng;
}
////////////
递归函数实现如下
int jiecheng(int J_jiecheng){
    int i = 0;
    if(J_jiecheng == 1) {
        i = 1;
    }
    else{
        i=jiecheng(J_jiecheng-1)*J_jiecheng;
    }
    return i;
}
都说递归函数耗费内存,什么时候用for好,什么时候用递归函数好呢?

评分

参与人数 2黑马币 +12 收起 理由
heimayili + 6 不错的,
joerk + 6 赞一个!加油,一起冲向就业班!!!.

查看全部评分

8 个回复

倒序浏览
同一个小功能 可以用for循环或递归分别完成,循环的时间复杂度和空间复杂度都优于用 递归实现。
递归的优越性在于条理清晰,可读性强,比较适宜于问题本身是递归性质的、用循环难于解决的问题。
在二者都不难的情况下,一般都是优先选用循环来解决问题的。
回复 使用道具 举报
QQ2544 发表于 2015-8-7 19:22
同一个小功能 可以用for循环或递归分别完成,循环的时间复杂度和空间复杂度都优于用 递归实现。
递归的优越 ...

非常感谢。
回复 使用道具 举报
其实可以把问题扩展一下,递归和递推是对应的,而for循环只是递推的一种形式,一般情况下递归和递推是可以相互转换的,相比较而言,递归比较易于理解,建立在“假设”之上,假设某一件事已经做到了,我该怎么做。而递推是一种严密的逻辑推理,由a推b由b进而推c。至于如何选择上还不太好说。因题而异,有的类型的题目只能选用递归的方法,比如汉诺塔,用递推是很难办到的。而逻辑清晰的题目用递推会显得言简意赅。我个人比较推荐平时训练时候尽量用递归的思路来,培养递归思想,久而久之你会发现一个很神奇的事情,看一个很难的问题,虽然你不会,但是你还是能解决,因为你在假设某件事做好的情况下只需完成很简单的一步就行了!祝你好运。
回复 使用道具 举报
我还没掌握递归,要好好学习一下
回复 使用道具 举报
第一梦 发表于 2015-8-8 00:16
其实可以把问题扩展一下,递归和递推是对应的,而for循环只是递推的一种形式,一般情况下递归和递推是可以 ...

多谢学姐指点.
回复 使用道具 举报
墨琰 发表于 2015-8-8 21:50
我还没掌握递归,要好好学习一下

一起加油喽!
回复 使用道具 举报
看下面评论,学习了!
回复 使用道具 举报
能看懂 不会用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马