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

嵌套层次深,函数调用开销大
重复计算

posted on 2019-04-26 15:01  destiny_sea  阅读(240)  评论(0)    收藏  举报