Recursive functions in python

# 尝试求10的阶乘(10!)
# 1! = 1
# 2! = 1 * 2 = 2
# 3! = 1 * 2 * 3 = 6
# 4! = 1 * 2 * 3 * 4 = 24

# print(1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10)
# 创建一个变量保存结果
n = 10
for i in range(1, 10):
    n *= i
# print('n=',n)  #n= 3628800
# 创建一个函数,可以用来求任意数的阶乘

def factorial_old(n):
    '''
     	该函数用来求任意数的阶乘
    :param n: 要求阶乘的数字
    :return: 阶乘的结果
    '''
    # 创建一个变量,来保存结果
    result = n

    for i in range(1, 10):
        result *= i
    return result


# 求10的阶乘
# result = factorial_old(10)

# print(result)

recursive function

# 从前有座山,山上有座庙,庙里有个老和尚,讲的什么故事呢?
# 从前有座山,山上有座庙,庙里有个老和尚,讲的什么故事呢?
# 从前有座山,山上有座庙,庙里有个老和尚,讲的什么故事呢?
#........

# 递归简单理解就是自己引用自己
# 递归式函数,在函数中自己调用自己
# 无穷递归,如果这个函数被调用程序的内存溢出,效果类似于死循环
def fn():
    fn()


# fn()
# 递归是解决问题的一种方式,它和循环很像
# 它的整体思想是,将一个大的问题分解为一个个小问题,直到问题无法分解时,再去解决问题
# 递归式函数的两个要件
#   1.基线条件
#       - 问题可以被分解为的最小问题,当满足基线条件时,递归就不在执行了
#   2.递归条件
#       - 将问题继续分解的条件
# 递归和循环很类似,基本是可以互相代替的,
# 循环编写起来比较容易,阅读起来稍难
# 递归编写起来难,但方便阅读
# 10! = 10 * 9!
# 9! = 9 * 8!
# 8! = 8 * 7!
# 7! = 7 * 6!
# 6! = 6 * 5!
# 5! = 5 * 4!
# 4! = 4 * 3!
# 3! = 3 * 2!
# 2! = 2 * 1!
# 1! = 1 #这里就是基线条件
def factorial(n):
    '''
    该函数用来求任意数的阶乘
    :param n:要求阶乘的数字
    :return: n的阶乘结果
    '''
    # 基线条件 判断 n是否为1,如果为1则此时不能再继续递归
    if n == 1:
        # 1的阶乘就是1,直接返回1
        return n
    # 递归的条件
    return n * factorial(n - 1)


print(factorial(10))

practise

# 创建一个函数power 来为任意数字做幂运算 n ** i
def power(n, i):
    '''
    为任意数字做幂运算
    :param n:做幂运算的数字
    :param i:做幂运算的次数
    :return: 返回幂运算结果
    '''
    # 基线条件
    if i == 1:
        return n
    # 递归条件
    return n * power(n, i - 1)


result = power(5, 3)
print(result)
# 创建一函数,用来检查一个任意的字符串是否是回文字符串,如果是返回True,否则返回False
#  回文字符串,字符串从前往后和从后往前念是一样的,例如abcba 就是一个回文字符串

def huiwen(str):
    '''
       检查一个任意的字符串是否是回文字符串
       :param str: 待检查的字符串
       :return: 返回True:是回文字符串或False:不是回文字符串
       '''
    # 第一种方式,没有用到递归,这种方式效率不高,需要每一个字符都比较完,才能做if判断
    # if str == str[::-1]:
    #     return True
    # return False

    # 第二种方式采用 递归的方式
    # 先检查第一个字符和最后一个字符是否一致,如果不一致则不是回文字符串
    #   如果一致,则看剩余的部分是否是回文字符串
    # 检查 abcdefgfedcba 是不是回文
    # 检查 bcdefgfedcb 是不是回文
    # 检查 cdefgfedc 是不是回文
    # 检查 defgfed 是不是回文
    # 检查 efgfe 是不是回文
    # 检查 fgf 是不是回文
    # 检查 g 是不是回文

    n = len(str)
    # 基线条件
    # 字符串的长度小于2,则字符串一定是回文
    if n < 2:
        return True
    elif str[0] != str[-1]:
        # 第一个字符和最后一个字符不相等,不是回文字符串
        return False
    # 递归条件
    return huiwen(str[1:-1])

    str = "abcyuycba"
    result = huiwen(str)
    print(result)

Guess you like

Origin blog.csdn.net/adminstate/article/details/131095782