python递归函数实例-python函数递归-实例

1.在一个函数体内调用它自身,被称为函数递归。函数递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。

例1.己知有一个数列:f(0) = 1,f(1) = 4,f(n + 2) = 2*f(n+ 1) +f(n),其中 n 是大于 0 的整数,求 f(10) 的值?

分析:

f(10)=2*f(9)+f(8);f(9)=2*f(8)+f(7);f(8)=2*f(7)+f(6);f(7)=2*f(6)+f(5);f(6)=2*f(5)+f(4);f(5)=2*f(4)+f(3);f(4)=2*f(3)+f(2);f(3)=2*f(2)+f(1)==>f(1),f(2)已知,所以可以推出f(9),f(8)的值。所以我们的目的就是通过递归函数反复调用自身,直到将欲求函数的表达式用已知变量f(1),f(2)代替。

deffun(n):if n==0:return 1

elif n==1:return 4

else:return 2*fun(n-1)+fun(n-2)print(fun(10))

例2.如果把上面数学题改为如此。己知有一个数列:f(20)=1,f(21)=4,f(n + 2)=2*f(n+1)+f(n),其中 n 是大于 0 的整数,求 f(10) 的值?

分析:

fn(10) = fn(12)-2*fn(11),而 fn(11) =fn(13)-2*fn(12)……依此类推通过函数递归,直到 fn(19) 等于 fn(21)-2*fn(20),此时就可以得到 fn(19) 的值,然后依次反算到 fn(10) 的值

deffn(n) :if n == 20:return 1

elif n == 21:return 4

else:return fn(n + 2) - 2*fn(n + 1)print(fn(10))

运行结果:

10497

-3771

tips:仔细看上面递归的过程,当一个函数不断地调用它自身时,必须在某个时刻函数的返回值是确定的,即不再调用它自身:否则,这种递归就变成了无穷递归,类似于死循环。

因此,在定义递归函数时有一条最重要的规定: 递归一定要向已知方向进行。(对于求 fn(10) 而言,如果 fn(0) 和 fn(1) 是已知的,则应该采用 fn(n)=2*fn(n-1)+fn(n-2) 的形式递归,因为小的一端已知;如果 fn(20) 和 fn(21) 是已知的,则应该采用 fn(n)=fn(n+2)-2*fn(n+1) 的形式递归,因为大的一端已知。)

例3.用循环和递归分别求 ∑100 (求1到100的和)

#循环

defsum1(n):

sum=0for i in range(1,n+1):

sum+=ireturnsumprint("循环累加:",sum1(100))#递归

defsum2(n):while n==0:return0while n!=0:return n+sum2(n-1)print("递归累加1:",sum2(100))defsum3(n):if n==1:return 1

else:return n+sum3(n-1)print("循环累加2:",sum3(100))

运行结果:

循环累加: 5050递归累加1:5050循环累加2:5050

例4.用循环和递归分别求 10!(阶乘)

#循环

defjiecheng1(n):

res= 1

for i in range(1,n+1):

res*=ireturnresprint("循环阶乘:",jiecheng1(10))#递归

defjiecheng2(n):while n==1:return 1

while n!=1:return n*jiecheng2(n-1)print("递归阶乘1:",jiecheng2(10))defjiecheng3(n):if n==1:return 1

else:return n*jiecheng3(n-1)print("递归阶乘2:",jiecheng3(10))

运行结果:

循环阶乘: 3628800递归阶乘1:3628800递归阶乘2:3628800

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值