go语言输出斐波那契 go语言斐波那契数列

go的错误码处理

目录结构: 都在src的目录下

创新互联建站主要从事网站制作、成都网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务漠河,10多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

主要是web.go 和http.go 的交互,fbn.go做了一个简单的斐波那契数列

先看web.go:

```

package main //入口

import (

"exdefer/filelistenserver/fileting"

"log"

"net/http"

"os"

)

type appHandler func(writer http.ResponseWriter, request *http.Request) error   //定义一个实现错误的方法

func errW(handler appHandler) func(writer http.ResponseWriter, request *http.Request) { //实现上面的方法

return func(writer http.ResponseWriter, request *http.Request) {

err := handler(writer, request) //http 的response 和request   设置一个错误的返回值

if err != nil { // 判断一下

log.Print("Print array ", err.Error(), "\n") //打印log

code := http.StatusOK //code 默认设置成200

switch { //switch选择

case os.IsNotExist(err): //如果输入的这个文件不存在

code = http.StatusNotFound //404

case os.IsPermission(err): //如果权限不够

code = http.StatusForbidden //403

default: //否则的话

code = http.StatusInternalServerError //500

}

http.Error(writer, http.StatusText(code), code) //输出 第一个参数 是response,第二个是 错误描述,返回的状态码 在swoole里面是$response-end("") /状态码是$response-status("");大同小异

}

}

}

func main() {

//第一个值是你要走的url目录 swoole里面通过document_root 进行设置

http.HandleFunc("/list/", errW(fileting.Handlist)) //调用的http.go的包

err := http.ListenAndServe(":8888", nil) //监听的端口 第二个值一般给nil

if err != nil {

panic(err)

}

}

```

http.go

```

package fileting //声明包

import (

"io/ioutil"

"net/http"

"os"

)

func Handlist(writer http.ResponseWriter, request *http.Request) error { //方法 返回一个error

path := request.URL.Path[len("/list/"):] //切片 path访问为localhost:8888/list/xxx.txt 中的xxx.txt

file, err := os.Open(path) //分开写了,两个返回值

if err != nil {

//http.Error(writer, err.Error(), http.StatusInternalServerError)

return err //直接return err

}

defer file.Close() //defer 一下  open完要记得

all, err := ioutil.ReadAll(file) //对文件的读取

if err != nil {

//panic(err)

return err

}

writer.Write(all) //reponse 里面的write 类似swoole $response-end()

return nil //如果没有错误返回nil

}

```

演示一下:

今日的学习,结束

go语言 使用递归与循环两种方式计算斐波那契数列

给定一个正整数n计算出对应斐波那契数列对应的值

说明:

用mackbookpro i7 2.7GHZ笔记本进行测试,结果如下:

备注: 当n=80时,由于测试等待时间过长,强制中断了执行。

从测试结果看出,当n逐渐增大,递归方式计算斐波拉契数列的时间复杂性急剧增加。当n值较大时可以考虑用循环方式代替。

类似的方式也可以用于,求阶乘、遍历目录、汉诺塔等问题的解决。在后期的文章中,我将这些内容进行补充,敬请期待,谢谢。

Go语言 斐波那契数列的解法

这么写效率很低,没有剪枝,存在大量的重复计算。

反正你测试用例是有限的,那我骗过你的测试用例就行了啊;)

针对8086的汇编语言 输入数字n输出为斐波那契数列的第n个数

;刚刚写好,呵呵,本人测试通过了,希望对您有帮助,为了方便你看,我加了些注释,有问题可以问我...

ASSUME CS:CODE,DS:DATA

DATA SEGMENT

BUFF DB 10

DB ?

DB 10 DUP(?)

RESULT DW ?

RESULT_SHOW DB 10 DUP(?)

DATA ENDS

CODE SEGMENT

START:

MOV AX,DATA

MOV DS,AX

LEA DX,BUFF

MOV AH,0AH

INT 21H

MOV DI,0

L0: ;统计一共有多少个数字组成

CMP BYTE PTR DS:[DI+2],0DH

JZ GO

INC DI

JMP L0

GO: ;计算第n个斐波那契数,把数字字符串转换为十进制数

MOV BL,10

MOV AX,1

MOV SI,DI ;为后面判断输入的是不是只输入一个数有用

MOV CX,DI

L2: PUSH AX

SUB BYTE PTR DS:[DI+1],30H

MUL BYTE PTR DS:[DI+1]

ADD RESULT,AX

POP AX

MUL BL

DEC DI

LOOP L2

;分两种情况:1.输入的是1;2.输入的不是1

CMP SI,1

JNZ L7

CMP BYTE PTR RESULT,1

JNZ L7

MOV AX,RESULT

JZ L4

L7: MOV AX,1

MOV BX,0

MOV CX,RESULT

DEC CX

L3: ;第n个斐波那契数存放到AX中

PUSH AX

ADD AX,BX

POP BX

LOOP L3

L4:

;显示这个斐波那契数

MOV DX,0

LEA SI,RESULT_SHOW

MOV DI,0 ;利用DI来累计一共有多少个数字

L5:

MOV CX,10

CALL DIVDW

ADD CL,30H

MOV DS:[SI],CL

CMP AX,0

JZ L6

INC SI

INC DI

JMP L5

L6:

MOV DL,DS:[SI]

MOV AH,2

INT 21H

CMP DI,0

JZ OK

DEC SI

DEC DI

JMP L6

OK:

MOV AX,4C00H

INT 21H

;参数: (AX)=DWORD型低16位数据

; (DX)=DWORD型高16位数据

; (CX)=除数

;返回: (DX)=结果的高16位,(AX)=结果的低16位

; (CX)=余数

;32位除16位,可以防止溢出!

DIVDW: ;子程序定义开始,功能是分离各个数字出来

PUSH AX

MOV AX,DX

MOV DX,0

DIV CX

MOV BX,AX

POP AX

DIV CX

MOV CX,DX

MOV DX,BX

RET ;子程序定义结束

CODE ENDS

END START

力扣(LeetCode)70爬楼梯Go语言实现报错为啥?

应该是递归层次太多,导致溢出了,考虑这个转变成循环吧,不然70级斐波那契递归层次太多了


网页名称:go语言输出斐波那契 go语言斐波那契数列
网站网址:http://scyanting.com/article/dodhhph.html