带你用练习来熟悉递归的用法
递归最最最重要的两个point:
1. 找到递归结束的条件,如果没有结束的条件,就会陷入无限循环
2. 找到不断缩小参数范围的等价式
从这两个point去思考题目,再补充剩下的代码,就会轻松许多啦
我们来看些练习,题目的要求我会以input和output的形式注释在代码中
Example1:
def rec_sum(lst):
"""
input: 由整数组成的list
output: 求这些整数的和
"""
For example:
<<<rec_sum([1,2,3,4])
10 (1+2+3+4)
""" 第一个if就是递归的结束条件"""
if len(lst) == 0:
return 0
else:
return lst[0] + rec_sum(lst[1:])
"""缩小范围:rec_sum(lst[1:])"""
print(rec_sum([1,2,3,4]))
Example2:
def rec_factorial(n):
"""
input:输入一个整数n
output:输出整数的阶乘,n!
"""
For example:
<<<input: rec_factorial(3)
6 ( 3! = 3 * 2 * 1)
if n == 0:
res = 1
else:
res = n * rec_factorial(n-1)
return res
print(rec_factorial(3))
Example3:
def dup_rem(s):
"""
input:输入一个string
output:输出无连续重复元素的string
"""
For example:
<<<dup_rem('fffsggfd')
‘fsgfd’
if len(s) <= 1:
return s
if s[0] == s[1]:
return dup_rem(s[1:])
if s[0] != s[1]:
return s[0] + dup_rem(s[1:])
print(dup_rem('fffsggfd'))
Example4:
def gcd(a, b):
"""
Input : two integers a and b such that not a==b==0
Output: greatest common divisor of a and b
"""
For example:
>>> gcd(18, 27)
9
"""
if a % b == 0:
return b
else:
return gcd(b, a % b)