带你从练习去了解递归真谛

带你用练习来熟悉递归的用法
递归最最最重要的两个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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值