一、求一个整数的阶乘:
1、常用的迭代方法写法:
def jc(n):
result = n
for i in range(1, n):
result *= i
return result
nu = int(input("输入一个整数:"))
result1 = jc(nu)
print("%d的阶乘是%d" % (nu, result1))
2、使用用递归的方法:
def fa(n):
if n == 1:
return 1
else:
return n*fa(n-1)
'''如输入的是5则执行过程:
fa(5) = 5*fa(4)
fa(4) = 4*fa(3)
fa(3) = 3*fa(2)
fa(2) = 2*fa(1)
fa(1) = 1 '''
num = int(input("输入一个整数:"))
result2 = fa(num)
print("%d的阶乘是%d"%(num,result2))
执行效果:
二、求斐波那契数列的第几项的值:
用数学函数形式表示斐波那契数列:
1、常用的迭代方法写法:
def fb(n):
n1 = 1
n2 = 1
n3 = 1
if n < 1:
print("重新输入大于等于1的数")
return -1
while (n - 2) > 0:
n3 = n2 + n1
n1 = n2
n2 = n3
n -= 1
return n3
num = int(input("输入斐波那契数列的第几项:"))
result = fb(num)
if result != -1:
print("第%d项的斐波那契值为%d" % (num, result))
2、使用用递归的方法:
def fb(n):
if n < 1:
print("重新输入大于等于1的数")
return -1
if n == 1 or n == 2:
return 1
else:
return fb(n - 1) + fb(n - 2)
num = int(input("输入斐波那契数列的第几项:"))
result = fb(num)
if result != -1:
print("第%d项的斐波那契值为%d" % (num, result))
执行效果:
三、用递归算法实现汉诺塔的解法:
汉诺塔游戏就是第一个柱子的圆盘通过中间柱子媒介和规律移动到第三个柱子且盘子上下顺序与第一个柱子开始的位置一样。
def hanota(n, x, y, z): # 参数n为有多少个盘子,设置参数xyz为串盘子的三个柱子
if n == 1:
print(x, "移动到", z)
else:
hanota(n - 1, x, z, y) # 将前n-1个盘子从a移动到b上
print(x, "移动到", z) # 将最底下的最后一个盘子从a移动到c上
hanota(n - 1, y, x, z) # 将b上的n-1个盘子c上
n = int(input("请输入汉诺塔盘子的层数:"))
hanota(n, "x", "y", "z")
执行效果:
*总结:
1、把数学的算式用代码实现
2、在有些编程中使用递归会比一般使用迭代会便捷整洁一些,但是如果没有使用好那么用递归写出的程序会出很大的问题
3、递归采用的是分治思想
4、递归的执行效率要比迭代慢许多 如果要计算较大的值时需等计算机计算一些时间