暴力递归之求阶乘、汉诺塔问题、字符串所有子序列、字符串的所有子串python实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

暴⼒递归之求阶乘、汉诺塔问题、字符串所有⼦序列、字符串的
所有⼦串python实现
暴⼒递归:
把问题转化为规模缩⼩了的同类问题的⼦问题
有明确的不需要继续进⾏递归的条件(base case)
有当得到了⼦问题的结果之后的决策过程
不记录每⼀个问题的解
1.给定任意正整数n,求n的阶乘
1def getFactorial(n):
2if n == 1:
3return 1
4return n*getFactorial(n-1)
2.打印n层汉诺塔从最左边移动到最右边的全部过程
1# 汉诺塔问题
2# O(2**n)
3def hanoi(n, A, B, C):
4if n == 1:
5print('move %s to %s' % (A, C))
6else:
7 hanoi(n-1, A, C, B)
8 hanoi(1, A, B, C)
9 hanoi(n-1, B, A, C)
3.打印⼀个字符串的全部⼦序列,包括空字符串
1# 求字串的所有⼦序列
2def printAllSubsquence(test, i, res):
3if i == len(test):
4print(res)
5return
6 printAllSubsquence(test, i+1, res) # 当前位置字符不加⼊
7 printAllSubsquence(test, i+1, res + test[i]) # 当前位置字符加⼊
4.打印⼀个字符串的全部排列,要求不要出现重复的排列
1# 求字串的全排列输⼊为list
2def printAllPermutations(test, i):
3if i == len(test):
4print(''.join(test))
5return
6for j in range(i, len(test)):
7 test[i], test[j] = test[j], test[i] # 依次与当前及之后的数交换
8 printAllPermutations(test, i+1) # 打印当前数之后的全排列
9 test[i], test[j] = test[j], test[i] # 把交换了的数字交换回去。

相关文档
最新文档