zoukankan      html  css  js  c++  java
  • 递归思想(钻出牛角尖)

    递归思想:函数中调用函数并使用返回值

    经典案例:

    快速指数

    目的:

    求值的整数次幂的聪明算法

    规格说明:

    利用递归的方法减少运算计算出整数次幂

    整数幂的运算法则: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计算四次

        

  • 相关阅读:
    wcdb中使用rowid做查询条件
    [转载]Linux下断开SSH连接后,让程序继续在后台执行
    Mac OS X wants to use the “system” keychain 的解决方案
    wcdb的主键和唯一性
    type(),dir(),getattr(),hasattr(), isinstance()用法
    获取昨天日期
    二分法
    三次握手和四次挥手
    py2和py3之间的不同
    flask 接收参数小坑
  • 原文地址:https://www.cnblogs.com/zhifeiji822/p/11896532.html
Copyright © 2011-2022 走看看