zoukankan      html  css  js  c++  java
  • Python递归

    什么是递归Recursion?

    〉 递归是一种解决问题的方法,其精髓是将问题分解为规模更小的相同问题,
    持续分解,直到问题规模小到可以用非常简单直接的方式来解决。
    〉 递归的问题分解方式非常独特,其算法方面的明显特征就是:在算法流程中
    调用自身。
    〉 递归为我们提供了一种对复杂问题的优雅解决方案,精妙的递归算法常会出
    奇简单,令人赞叹。

    递归“三定律”

     〉 为了向阿西莫夫的“机器人三定律”致敬,递归算法也总结出“三定律”

    1 ,递归算法必须有一个基本结束条件(最小规模问题的直接解决)
    2 ,递归算法必须能改变状态向基本结束条件演进(减小问题规模)
    3 ,递归算法必须调用自身(解决减小了规模的相同问题)

    列表求和:

    def sum_list(lst):
    	if len(lst) == 1:#终止条件
    		return lst[0]
    	return lst[0] + sum_list(lst[1:])#减小规模并调用自身
    
    
    if __name__ == '__main__':
    	lst = [1, 2, 3, 4, 5]
    	print(sum_list(lst))

    列表反转:

    def reverse_str(str):
    	if str == "":
    		return str
    	return reverse_str(str[1:]) + str[0]

    回文词判断:

    def check(str):
    	if str == "" or len(str) == 1:
    		return True
    	return str[0] == str[len(str) - 1] and check(str[1:len(str) - 1])

    进制转换:

    def convertToStr(n, base):
    	string = "0123456789ABCDEF"
    	if n < base:
    		return string[n]
    	return convertToStr(n // base, base) + convertToStr(n % base, base)
    
  • 相关阅读:
    高级特性(4)- 数据库编程
    UVA Jin Ge Jin Qu hao 12563
    UVA 116 Unidirectional TSP
    HDU 2224 The shortest path
    poj 2677 Tour
    【算法学习】双调欧几里得旅行商问题(动态规划)
    南洋理工大学 ACM 在线评测系统 矩形嵌套
    UVA The Tower of Babylon
    uva A Spy in the Metro(洛谷 P2583 地铁间谍)
    洛谷 P1095 守望者的逃离
  • 原文地址:https://www.cnblogs.com/jasonhaven/p/7617619.html
Copyright © 2011-2022 走看看