python实现递归算法_典型递归算法例子-------Python实现

#!/usr/bin/python

#coding=utf-8

'''

Created on 2012-9-25

@author: linzuxin

'''

status = {}

def factorial(n):

'''

输入一个数字,求其阶乘。status是一个hash,用来存储中间结果,避免重复计算

@param n: 要求的数字

@return: n的阶乘

'''

if n == 0 or n == 1:

status[0] = 1

status[1] = 1

return 1

elif status.has_key(n):

return status[n]

else:

status[n] = factorial(n - 1) * n

return status[n]

print factorial(100)

#!/usr/bin/python

#coding=utf-8

'''

Created on 2012-9-25

@author: linzuxin

'''

status = {}

def fibonacci(n):

'''

输入一个数字,求其斐波那契数。status是一个hash,用来存储中间结果,避免重复计算

@param n: 要求的数字

@return: n的斐波那契数

'''

if n == 0 or n == 1:

status[0] = 1

status[1] = 1

return 1

elif status.has_key(n):

return status[n]

else:

status[n] = fibonacci(n - 2) + fibonacci(n - 1)

return status[n]

print fibonacci(100)

#!/usr/bin/python

#coding=utf-8

'''

Created on 2012-9-26

@author: linzuxin

'''

def permutation(array, start, end):

'''

输入一个数组,然后输出其全排列

@param array: 要求全排列的数组

@param start: 数组的开始下标

@param end: 数组的结束下标

'''

if start == end:

for i in array:

print i,

print

else:

for i in range(start, end + 1):

array[start], array[i] = array[i], array[start]

permutation(array, start + 1, end)

array[start], array[i] = array[i], array[start]

array = [1, 2, 3]

permutation(array, 0, len(array) - 1)

#!/usr/bin/python

#coding=utf-8

'''

Created on 2012-9-26

@author: linzuxin

'''

status = {}

def divideInt(n, m):

'''

输入一个数字,求其整数划分种类

@param n: 要求的数字

@param m: 划分中最大的加数不大于m

@return: 划分总数

'''

try:

return status[(n, m)]

except KeyError:

if n == 1 or m == 1:

status[(n, m)] = 1

return status[(n, m)]

elif m > n:

status[(n, m)] = divideInt(n, n)

return status[(n, m)]

elif m == n:

status[(n, m)] = 1 + divideInt(n, n - 1)

return status[(n, m)]

else:

status[(n, m)] = divideInt(n - m, m) + divideInt(n, m - 1)

return status[(n, m)]

print divideInt(500, 500)

#!/usr/bin/python

#coding=utf-8

'''

Created on 2012-9-26

@author: linzuxin

'''

count = 0

def hanoi(n, start, end, middle):

'''

输入汉诺塔个数,求出其需要移动的次数

@param start: 开始汉诺塔的位置

@param end: 最终汉诺塔的位置

@param middle: 用来过渡的位置

'''

global count

if n == 1:

print start, ' => ', end

count += 1

else:

hanoi(n - 1, start, middle, end)

print start, ' => ', end

count += 1

hanoi(n - 1, middle, end, start)

hanoi(2, 'A', 'B', 'C')

print count

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值