note 7 递归函数

递归:程序调用自身
形式:在函数定义有直接或间接调用自身

阶乘:N!=123...N

def p(n):
    x = 1
    i = 1
    while i <= n:
        x = x * i
        i = i + 1
    return x

n!=(n-1)! * n
...

兔子数列

斐波那契数列


def fib(n):
    if n == 1 or n == 2:
        return 1
    else :
        return fib(n - 1) + fib(n - 2)

print fib(6)

汉诺塔

count = 0#步骤数    x**n - 1
def hanoi(n,A,B,C):
    global count
    if n == 1:
        print 'Move',n,'from',A,'to',C
        count += 1
    else:
        hanoi(n - 1,A,C,B)
        print 'Move',n,'from',A,'to',C
        count += 1
        hanoi(n - 1,B,A,C)

hanoi(5,'Left','Mid','Right')
print count

随机停车

#随机停车
import random

def parking(low,high):
    if high - low < 1:
        return 0
    else :
        x = random.uniform(low,high - 1)
        return parking(low,x) + 1 + parking(x + 1,high)

s = 0
for i in range(1000):
    s += parking(0,5)
    
print s / 10000.

Renyi停车常数

递归的时间开销

递归的优劣分析

优势strength

它能使一个蕴含递归关系且结构复杂的程序简洁精炼,增加可读性
特别是在难于找到从边界到解的全过程的情况下,如果把问题推进一步,其结构仍维持原问题的关系

劣势weakness

嵌套层次深,函数调用开销大
重复计算
原文地址:https://www.cnblogs.com/OceanF/p/10774322.html