≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 网络编程 > Python

python迭代与递归的简单示例

人气:550 时间:2018-10-02

这篇文章主要为大家详细介绍了python迭代与递归的简单示例,具有一定的参考价值,可以用来参考一下。

对python这个高级语言感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

遇到一个情况,需要进行递归操作,但是呢递归次数非常大,有一万多次。先不说一万多次递归,原来的测试代码是java的,没装jdk和编译环境,还是用python吧

先看下原本的java代码:


public class UpCount {
    private long calc(int depth) {
        if (depth == 0) return 1;
        long cc = calc(depth - 1);
        return cc + (depth % 7) + ((((cc ^ depth) % 4) == 0) ? 1 : 0); 
    }
    public static void main(String[] args) {
        UpCount uc = new UpCount();
        System.out.println(uc.calc(11589));
    }
}

# End www_512pic_com

java没怎么玩过,但是这几行代码看过来还是没压力的,快刀斩乱麻改为对于python代码


# @param python中的迭代与递归
# @author 四海网|www.q1010.com 


def calc(depth):
    if depth == 0:
        return 1
    cc = long(calc(depth-1))
    xor_mod = (cc ^ depth)%4
    if xor_mod == 0:
        return cc+(depth%7)+1
    else:
        return cc+(depth%7)
 
number = long(calc(11589))
print number

# End www_512pic_com

代码粘上去,F5,出错了

这个版本的代码本来是没有加long的,因为之前一串十几位的整数直接拿来就可以用,所以怀疑跟long是不是有关系

当然啦,事实上这里跟long完全没关系,python支持的整数长度可是非常长的,参考之前写的代码如下:


# @param python中的迭代与递归
# @author 四海网|www.q1010.com 


cimal = 7
original = 28679718602997181072337614380936720482949
array = ""
result= ""
while original !=0:
    remainder = original % cimal
    array += str(remainder)
    original /= cimal
length = len(array)
for i in xrange(0,length):
    result += array[length-1-i]
print result

# End www_512pic_com

上面这段代码将一串很长的十进制数字转为7进制表示,也可以转为任意进制,换做是8进制和16进制,一个oct(),hex()就搞定了,用辗转相除法来解决吧

因此,可以看出来,出错不在于数的大小,毕竟11589对现在的计算机来说只是小菜,2^16还有65536呢

其实到这里才发现,没有说前面递归报错的真正原因,憔悴了

递归出错的原因是因为python默认的递归限制只有1000次左右,但是这里却要运行10000+,刷了半天:RuntimeError: maximum recursion depth exceeded

于是赶紧查了下,发现可以自己设置递归的限制,见python中递归的最大次数,作为延伸也可以查看官网文档

总的说来就是,为了防止益处和崩溃,python语言默认对次数加了限制,那么我改了这个限制是不是就ok了呢

import sys

# set the maximun depth as 20000

sys.setrecursionlimit(20000)

插入上面代码,果断改20000,这下没这限制应该没问题了,但是结果却大跌眼镜,什么都没输出来,不解了

没有继续查了,问了下小伙伴littlehann,讨论了下, 没有对这个问题深究下去。而是提到递归这种运算在实际应用中的效率,确实除了课本上很少看到使用递归的

本来的目的就只是求值,没想对它深究下去,还是改用迭代吧,虽然没太大印象了,不过一个for语句据可以搞定了

代码如下:


# @param python中的迭代与递归
# @author 四海网|www.q1010.com 


def calc(depth):
    tmp = 0
    result = 1
    
    for i in xrange(0,depth+1):
        cc = result
        if (cc ^ i)%4 == 0:
            tmp = 1
        else:
            tmp = 0
        result = result + (i)%7 + tmp
        
    return result
final = calc(11589)
print final

# End www_512pic_com

短短几行代码,一下子搞定了。想到上次面试的时候,tx的面试官问我算法,当时提到了用递归实现一个运算,再想想是不是也可以用迭代呢?

时间过去很久了,当时的题目也记不太清楚了,但是今天的教训是:大多数(代码写得少,凭感觉说的估计值)情况下,递归的效率是比较低下的,这一点可以确定,上课的

时候也有讲到过。使用迭代的效率明显要高过递归(迭代的具体概念记不太清楚了),起码用循环,运算几十万次我可以肯定没问题,但是即便我改了递归限制,还是遇到了罢工

最后,再贴出一个python long VS C long long的链接,感兴趣的可以去看看

本文来自:http://www.q1010.com/181/1992-0.html

注:关于python迭代与递归的简单示例的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:迭代,递归

您可能感兴趣的文章

  • Python递归算法的简单示例
  • python 递归最多达到多少次功能解析
  • php 递归删除非空文件夹示例
  • php和MySQL使用函数递归实现动态树型菜单示例
  • php通过递归复制目录和子目录的简单示例
  • php 利用递归函数删除整个目录的简单示例
  • php递归函数实现数字累加的简单示例
  • PHP 递归遍历目录所有文件并统计文件数量示例
  • php 静态变量和递归用法示例
  • php 删除指定目录,并递归删除子目录的简单示例
上一篇:python处理抓取中文编码和判断编码的简单示例
下一篇:Python转义字符实现方法
热门文章
  • Python 处理Cookie的菜鸟教程(一)Cookie库
  • python之pandas取dataframe特定行列的简单示例
  • Python解决json.dumps错误::‘utf8’ codec can‘t decode byte
  • Python通过pythony连接Hive执行Hql的脚本
  • Python 三种方法删除列表中重复元素的简单示例
  • python爬虫代码示例
  • Python 中英文标点转换示例
  • Python 不得不知的开源项目解析
  • Python urlencode编码和url拼接实现方法
  • python按中文拆分中英文混合字符串的简单示例
  • 最新文章
    • Python利用numpy三层神经网络的简单示例
    • pygame可视化幸运大转盘的简单示例
    • Python爬虫之爬取二手房信息的简单示例
    • Python之time库的简单示例
    • OpenCV灰度、高斯模糊、边缘检测的简单示例
    • Python安装Bs4及使用的简单示例
    • django自定义manage.py管理命令的简单示例
    • Python之matplotlib 向任意位置添加一个子图(axes)的简单示例
    • Python图像标签标注软件labelme分析的简单示例
    • python调用摄像头并拍照发邮箱的简单示例

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。