递归思想(钻出牛角尖)

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计算四次

 

 

 

    

 

 

 

 

 

 

 

以上是关于递归思想(钻出牛角尖)的主要内容,如果未能解决你的问题,请参考以下文章

算法初步--递归思想(java实现)

算法初步--递归思想(java实现)

算法初步--递归思想(java实现)

算法初步--递归思想(java实现)

Java中的递归思想

关于回调和递归思想的理解