1、求10的阶乘(10!)
# 创建一个变量保存结果
n = 10
for i in range(1,10): # 表示数字从1~9
n *= i
print (n)
2、创建一个函数,用来求任意数的阶乘
def fun(n) :
'''
该函数用来求任意数的阶乘
参数:
n 要求阶乘的数字
'''
# 创建一个变量,来保存结果
result = n
for i in range(1,n) :
result *= i
return result
# 求10的阶乘
print(fun(10))
一、递归
1、递归简单理解就是自己去引用自己
2、递归是解决问题的一种方式,它和循环很像,它的整体思想是,将一个大问题分解为一个个的小问题,知道问题无法分解时,再去解决问题
3、递归式函数,在函数中自己调用自己
(1)无穷递归,如果这个函数被调用,程序的内存会溢出,效果类似于死循环
def fn() :
fn()
fn()
(2)递归式函数的两个条件
①基线条件
- 问题可以被分解为的最小问题,当满足基线条件时,递归就不再执行了
②递归条件
- 将问题继续分解的条件
def fn(n):
'''
该函数用来求任意数的阶乘
参数:
n 要求阶乘的数字
'''
# 基线条件 判断n是否为1,如果为1则此时不能再继续递归
if n == 1 :
# 1的阶乘就是1,直接返回1
return 1
# 递归条件
return n *fn(n-1)
print (fun(10))
二、练习
1、创建一个函数 power 来为任意数字做运算 n ** i
# 10 ** 5 = 10 * 10 ** 4
# 10 ** 4 = 10 * 10 ** 3
# ...
# 10 ** 1 = 10
def power(n,i):
'''
power()用来为任意的数字做幂运算
参数:
n 要求幂运算的数字
i 做幂运算的次数
'''
# 基线条件
if i == 1 :
# 求 1 次幂
return n
# 递归条件
return n * powe(n,i-1)
print (power(2,3))
2、创建一个函数,用来检查一个任意的字符串是否是回文字符串,如果是返回True,否则返回False(回文字符串,字符串从前往后念和从后往前念是一样的,如:12321)
# abjilclijba 先检查第一个字符和最后一个字符是否一致,如果不一致则不是回文字符串,如果一致,则看剩余的部分是否是回文字符串
# 检查 abjilclijba 是不是回文
# 检查 bjilclijb 是不是回文
# 检查 jilclij 是不是回文
# 检查 ilcli 是不是回文
# 检查 lcl 是不是回文
# 检查 c 是不是回文
def hui_wen(s)
'''
该函数用来检查指定的字符串是否为会问字符串,如果是返回True,否则返回False
参数:
s : 就是要检查的字符串
'''
# 基线条件
if len(s)<2:
# 字符串的长度小于2,则字符串一定是回文
return True
elif s[0] != s[-1] :
# 第一个字符和最后一个字符不相等,不是回文字符串
return False
# 递归条件
return hui_wen(s[1:-1]) # 切片
print (hui_wen('hello'))