人工智能之Python12 递归

俗语:普通的程序员用迭代,天才的程序员用递归。

概念

从原理上讲,就是函数调用自身这么一个行为。

如果递归使用不当会很容易出现“死循环”-一种无法结束的函数,直至耗尽所有内存资源。不过Python3处于“善意的保护”,对递归的深度默认限制是100层,所以循环100次后一定会停止。

不过如果些爬虫,想要爬取更深层次的话可以手动修改递归深度,如下

import sys
sys.setrecursionlimit(100000000) ## 将递归的限制设置成一亿次

阶乘函数

正整数的阶乘是指从1乘以2乘以3乘以4一直乘到所要求的数。例如1*2*3*4*5=120,所以120是5的阶乘

普通实现

def factorial(x) :
    result = 0
    for x in range(1,x):
        result *= x
    return result * x

number = int(input('请输入一个整数:'))
print('%d 的阶乘是:%d' % (number,factorial(number)))

递归实现

def factorial(x) :
    if x == 1:
        return 1
    else :
        return x * factorial(x - 1)

number = int(input('请输入一个整数:'))
print('%d 的阶乘是:%d' % (number,factorial(number)))

兔子生兔子

学每一种编程语言基本上都会实现“兔生兔”算法。

兔子在出生两个月之后,就有繁殖能力,在拥有繁殖能力之后,这对兔子每个月能生出一对小兔子。假设兔子都不死去,能够一直繁殖下去,那么一年之后可以繁殖多少只兔子。

递归实现

# 递归实现
def rabbit(n):
    if n < 0:
        print("输入错误")
        return -1
    if n == 1 or n == 2:
        return 1
    else :
        return rabbit(n-1) + rabbit(n-2)

print("一年后总共有%d 对兔子" % rabbit(12))

总结

如果递归忘记了返回或者错误的设置了返回条件,那么执行这样的递归代码就会变成一个黑洞:只进不出!所以再写递归代码的时候一定要注意返回。
递归有缺陷,但既然存在于各种编程语言中,必有其存在的价值。递归用在妙处,自然代码简介、所以说“天才的程序员用递归”

猜你喜欢

转载自blog.csdn.net/u012806787/article/details/79317488