go语言 使用递归与循环两种方式计算斐波那契数列给定一个正整数n计算出对应斐波那契数列对应的值
说明:
用mackbookpro i7 2.7GHZ笔记本进行测试 , 结果如下:
备注: 当n=80时 , 由于测试等待时间过长,强制中断了执行 。
从测试结果看出,当n逐渐增大,递归方式计算斐波拉契数列的时间复杂性急剧增加 。当n值较大时可以考虑用循环方式代替 。
类似的方式也可以用于,求阶乘、遍历目录、汉诺塔等问题的解决 。在后期的文章中,我将这些内容进行补充 , 敬请期待,谢谢 。
go的错误码处理目录结构: 都在src的目录下
主要是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
}
```
演示一下:
今日的学习,结束
哪位高手能不能帮我用汇编语言编写一个程序,就是表示出斐波那契数列的前20个数?;刚刚写好,呵呵 , 本人测试通过了,希望对您有帮助,为了方便你看 , 我加了些注释 , 有问题可以问我...
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
BUFFDB 10
DB ?
DB 10 DUP(?)
RESULTDW ?
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
编写一个C程序,用于打印斐波那契数列的前10个数……
通常的教材上讲到递归时 , 引用“斐波那契数列”的例子,其实我感觉这是一个误导 。“斐波那契数列”的递归解决是效率最低的 。
【递归版】
//打印斐波那契数列的前10项
#include stdio.h
#define MAX 10
int fib(int n);
int main(){
int i;
printf("斐波那契数列的前10项是:\n");
for(i=1;i=MAX;i){
printf("%d\t",fib(i));
}
return 0;
}
int fib(int n){
return n3?1:(fib(n-1) fib(n-2));
}
【迭代版】
//打印斐波那契数列的前10项
#include stdio.h
#define MAX 9
int main(){
int fib[MAX],i=2;
fib[0]=fib[1]=1;
printf("斐波那契数列的前10项是:\n%d\t%d\t",fib[0],fib[1]);
while(i10){
fib[i]=fib[i-1] fib[i-2];
printf("%d\t",fib[i]);
i;
}
return 0;
}
【go语言打印斐波那契数列 编写一个程序打印斐波那契数列】关于go语言打印斐波那契数列和编写一个程序打印斐波那契数列的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 电脑直播美颜摄像头,电脑直播美颜相机
- go语言的json,go语言的底层是用什么实现的
- 视频号直播设备异常,视频号直播安全警告怎么办
- vb.net数组变量 vb60数组定义
- C语言应用程序配置设计,c语言程序设计需要什么配置
- jquery下翻,jquery返回上一页并刷新
- 什么是word的索引,word中什么是索引
- linux显示图片命令 linux显示jpg图片
- mysql界面设置中文6,mysql界面设置中文