是一种直接或者间接调用函数自身的算法,其实质是把问题分解成规模缩小的同类子问题,然后递归调用表示问题的解。可以说,在一个函数体内部去调用该函数的本身,该函数就是递归函数,即该函数题内部嵌套了其本身的部分。
一个完整的递归操作由两个部分组成,一部分是递归调用,另一个部分是递归终止条件,一般可以使用if-else结构来判断递归函数的调用和递归的终止。
能够设计成递归算法的问题必须满足两个条件:
一是:能找到反复执行的过程;
二是能找到跳出担负执行的过程的条件。(递归出口)
由于递归的前提是函数的调用,先定义函数,
def fact(n): ##n的阶乘为n!=n*(n-1)!
if n==1:
return 1
else:
return n*fact(n-1)##自己调用自己了
print(fact(5))
上述代码运行结果为120。
例:辗转相除法求解两个数之间的最大公约数。循环编程的思路为两个正整数a和b,余数为temp,若temp为0,则b为最大公约数,若temp不为0,则把b赋值给a,temp的值赋值给b,重新计算a/b,直到余数为0.
采用循环结构的程序编写:
#定义几个参数的初值带处理:
a=162
b=189
temp=2
if b>a:
b,a=a,b
while temp!=0:
temp=a%b
if temp==0:
print('最大公约数为%d',b)
else:
a=b
b=temp
采用函数递归:
def gcd(a,b):
if b==0:
return a
else:
return gcd(b,a%b)
a=162
b=189
print('%d与%d的最大公约数为%d'%(a,b,gcd(a,b)))
例:设n为大于等于2的正整数,用函数递归的方法求级数n!-(n-1)!的结果,其中n为4——10之间任意输入整数。
def fact(n):
if n == 1:
return 1
else:
return n * fact(n-1)
n = int(input("请输入n的值:"))
if n>=4 and n<=10 :
s=fact(n) - fact(n-1)
print('结果为:%d'%(s))
else:
print("输入无效")
上面代码的思路是,首先定义阶乘的函数,再在其后书写一个计算结果的程序,程序中出现了二次递归得到现象,比较低级。