zoukankan      html  css  js  c++  java
  • 换零钱和快速幂

     换零钱总的思路就是包括某个币值的和不包括的,然后递归。

    用递归的思路不需要考虑太多的细节,对于这种加的递归,我们简单来看就是一个递归树的执行,也就是说两者不可能是同时的,所以不用考虑冲突的问题。

    var i []int
    
    func main() {
        i = []int{1, 2, 3, 5, 10}
        println(fff(2, 5))
    }
    
    func fff(a, n int) int {
        if a == 0 {
            return 1
        }
        if a < 0 || n == 0 {
            return 0
        }
        return fff(a, n - 1) + fff(a - i[n - 1], n)
    }

    求幂的话,作为从业者肯定不能写累乘这种,实在太无脑。

    思路是什么呢,就是用利用二进制

     a^11 = a(2  ^ 0 + 2 ^ 1 + 2 ^ 3) = a ^(1011);

    这个例子就很明显了,就是将n转换为二进制表达,然后再算的时候我们只需要对通过进制来避免重复的从0-n这种的相乘,计算机到不太在乎你乘的数值大小,反而在意你的次数。

    func FastPow(a, n int) int {
        ans := 1
        base := a
    
        for n != 0 {
            if n & 1 != 0 {
                ans = ans * base
            }
            base *= base
            n >>= 1
        }
        return ans
    }
    
    func NormalPow(a, n int) int {
        ans := 1
        base := a
        for n != 0 {
            ans *= base
            n--
        }
        return ans
    }

    end

    一个没有高级趣味的人。 email:hushui502@gmail.com
  • 相关阅读:
    Oracle 字符集的查看和修改
    Hibernate查询方法与缓存的关系
    Oracle Sql语句整理
    Android动画效果
    Acrobat9键盘快捷键
    Head区的设置
    JAR,WAR,EAR区别
    ASCII码表完整版
    HTML的meta标签详解
    .NET中TextBox控件设置ReadOnly=true后台取不到值三种解决方法
  • 原文地址:https://www.cnblogs.com/CherryTab/p/12397053.html
Copyright © 2011-2022 走看看