递归思想(钻出牛角尖)
Posted zhifeiji822
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归思想(钻出牛角尖)相关的知识,希望对你有一定的参考价值。
递归思想:函数中调用函数并使用返回值
经典案例:
快速指数
目的:
求值的整数次幂的聪明算法
规格说明:
利用递归的方法减少运算计算出整数次幂
整数幂的运算法则:a**4=a x a x a x a 也可以写成a**4=(a**2) x( a**2),如果是奇数幂的:a**5=(a**2) x( a**2)x a
我们可以利用这种关系作为递归函数的基础:只需要找到一个合适的基本情况。注意,
计算第 n 次幂需要计算两个较小的幂(n // 2)。如果我们继续使用越来越小的 n 值,它将最 终达到 0(整数除法中 1 // 2 = 0)。
正如你从数学课中学到的,对于任何值 a(0 除外),a0 = 1。这就是基本情况。
设计:
创建函数:recPower,需要输入求幂的整数,和求的整数幂次数(s,n)
判断如果n是0的话,直接返回1
递归函数(拆分计算每个函数的值,用来最终计算整数幂)计算每次递归的值并返回到factor
判断奇数偶数,如果奇数算法为factor*factor*a,如果偶数:factor*factor
代码实现:
def recPower(s,n):
if n==0:
return 1
else;
factor=recPower(s,n//2)
if n%2 == 0:
return factor*factor
else:
return factor*factor
牛角尖问题:每次函数返回值到哪了?
递归过程:factor=recPower(2,4//2)[factor=4]——》recPower(2,2//2)[factor=2]——》recPower(2,1//2)[factor=1]
牛角尖答案:每次返回的值都是factor,factor计算四次
以上是关于递归思想(钻出牛角尖)的主要内容,如果未能解决你的问题,请参考以下文章