xml地图|网站地图|网站标签 [设为首页] [加入收藏]
递归算法的理解与应用,不同系统下的可执行文
分类:编程

 一般在本机上完成基于Flask框架的代码编写后,如果有接口或者数据操作方面需求需要把代码部署到指定服务器上。

递归算法(recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。

Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能。

 

通俗的说就是能把大问题等价于一个小问题的循环重复,从而通过解决一个小问题来达到解决大问题的目的。

1、Mac下编译Linux, Windows平台的64位可执行程序:

一般情况下,使用Flask框架开发者大多数都是选择Python虚拟环境来运行项目,不同的虚拟环境中配置依赖包信息不同。如果重新迁移到一个新的虚拟环境后,又重新来一个一个的配置依赖包,那将会很浪费时间。

这里的循环重复,和普通的loop 语句不太一样,在代码中体现为方法的自调用。

$ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go
$ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go

 

众所周知,循环的过程必须有一个控制条件来断开循环,否则就会无限循环下去。

2、Linux下编译Mac, Windows平台的64位可执行程序:

下面介绍一个简单易用的技巧,也是我自己在书本上看到的,以防每次配置需要翻阅书籍的麻烦,所以单自写一篇文章作记录,方便自己以后查看,也希望给其他学习的同学有点帮助。

所以,能够使用且应该使用递归算法的应用场景,个人归纳为三点:

$ CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.go
$ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go

 

  1. 大问题能拆分等价于小问题的循环重复(必须)

3、Windows下编译Mac, Linux平台的64位可执行程序:

完成项目相关代码编写后,打开本机CMD,进入项目虚拟环境Scripts目录下,具体操作如下:

2. 有控制条件(称为出口)来断开自我调用,或者继续自我调用,控制条件并不一定是简单的判断语句,可以有多种情况或者多个条件(必须)

$ SET CGO_ENABLED=0SET GOOS=darwin3 SET GOARCH=amd64 go build test.go
$ SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build test.go

 图片 1

  1. 一次自调用的结果,应该是下一次调用的初始值

注:如果编译web等工程项目,直接cd到工程目录下直接执行以上命令

 

 

GOOS:目标可执行程序运行操作系统,支持 darwin,freebsd,linux,windows
GOARCH:目标可执行程序操作系统构架,包括 386,amd64,arm

输入

让我们来看几个例子,并且对比使用递归算法以及不使用递归的差异,了解一下使用递归的心路历程。

Golang version 1.5以前版本在首次交叉编译时还需要配置交叉编译环境:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bash
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./make.bash

cd E:WorkPlaceGit_pythonMyDemo-tenvenvScripts

 1. 阶乘

进入到上面命令指定目录。

        //n*(n-1)*(n-1-1)*(n-1-1-1)...
        //解析n *(n-1) *(n-1-1)
        //阶乘的过程归纳为一个乘法运算的重复 *(n-1)
        public static double FactorialWithRecursion(int n) 
        {
            var result = 1;
            int temp;

            if (n > 1)
            {
                result = n * (n - 1);
                {
                    temp = n - 1;
                    if (temp > 1)//可以看到往下都是一个重复的过程,可以看作是一个递归方法调用的展开 
                    {
                        result = result * (temp - 1);
                        temp = temp - 1;

                        if (temp > 1) 
                        {
                            result = result * (temp - 1);
                            temp = temp - 1;

                            if (temp > 1) 
                            {
                                result = result * (temp - 1);//可以把重复的代码抽离出来写出一个方法
                                ...
                            }
                        }
                    }
                }
                return result;
            }
            else 
            {
                return result;
            }
        }

 

经过抽离重复的代码,可以改进为如下。

然后输入命令

        public static double FactorialWithRecursion(int n) 
        {
            if (n > 1)//明确终止条件
            {
                Console.Write(n+"*");
                return n * FactorialWithRecursion(n - 1);
            }
            else //当不满足终止条件时的处理,即断开自我循环调用的点
            {
                Console.WriteLine(1);
                return 1;
            }
        }

本文由澳门新葡亰手机版发布于编程,转载请注明出处:递归算法的理解与应用,不同系统下的可执行文

上一篇:高并发和多线程的关系,自学课程 下一篇:没有了
猜你喜欢
热门排行
精彩图文