最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入解析Go語言編程中的遞歸使用

 更新時(shí)間:2015年11月02日 14:25:55   投稿:goldensun  
這篇文章主要介紹了Go語言編程中的遞歸使用,是Go語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

遞歸是以相似的方式重復(fù)項(xiàng)目的過程。同樣適用于編程語言中,如果一個(gè)程序可以讓你調(diào)用同一個(gè)函數(shù)被調(diào)用的函數(shù),遞歸調(diào)用函數(shù)內(nèi)使用如下。

復(fù)制代碼 代碼如下:

func recursion() {
   recursion() /* function calls itself */
}

func main() {
   recursion()
}


Go編程語言支持遞歸,即要調(diào)用的函數(shù)本身。但是在使用遞歸時(shí),程序員需要謹(jǐn)慎確定函數(shù)的退出條件,否則會(huì)造成無限循環(huán)。

遞歸函數(shù)是解決許多數(shù)學(xué)問題想計(jì)算一個(gè)數(shù)階乘非常有用的,產(chǎn)生斐波系列等

數(shù)字階乘
以下是一個(gè)例子,它計(jì)算階乘用于使用一個(gè)遞歸函數(shù)由給定數(shù):

復(fù)制代碼 代碼如下:

package main

import "fmt"

func factorial(i int) {
   if(i <= 1) {
      return 1
   }
   return i * factorial(i - 1)
}

func main { 
    var i int = 15
    fmt.Printf("Factorial of %d is %d\n", i, factorial(i))
}


讓我們編譯和運(yùn)行上面的程序,這將產(chǎn)生以下結(jié)果:
復(fù)制代碼 代碼如下:

Factorial of 15 is 2004310016

斐波那契系列
以下是另一個(gè)例子,其產(chǎn)生斐波串聯(lián)使用一個(gè)遞歸函數(shù)由給定一個(gè)數(shù):
復(fù)制代碼 代碼如下:

package main

import "fmt"

func fibonaci(i int) {
   if(i == 0) {
      return 0
   }
   if(i == 1) {
      return 1
   }
   return fibonaci(i-1) + fibonaci(i-2)
}

func main() {
    var i int
    for i = 0; i < 10; i++ {
       fmt.Printf("%d\t%n", fibonaci(i))
    }   
}


讓我們編譯和運(yùn)行上面的程序,這將產(chǎn)生以下結(jié)果:

0 1 1 2 3 5 8 13 21 34

golang 遞歸判斷回文字符串
判斷回文字符串是個(gè)比較經(jīng)典的問題。

思路就是拿第一個(gè)字符和最一個(gè)字符比較,如果不等退出,相同的話繼續(xù)剛剛的過程,直到第一個(gè)字符和最后一個(gè)字符相遇或者他們的距離為1時(shí)。說明他們是回文字符串。

下面的代碼會(huì)忽略空白字符 如"1   1  2 1"會(huì)讓為是回文字符串。

復(fù)制代碼 代碼如下:

package main

import (
    "fmt"
    "os"
    "strings"
    "unicode/utf8"
)

func doPalindrome(s string) bool {
    if utf8.RuneCountInString(s) <= 1 {
        return true
    }  

    word := strings.Trim(s, "\t \r\n\v")
    first, sizeOfFirst := utf8.DecodeRuneInString(word)
    last, sizeOfLast := utf8.DecodeLastRuneInString(word)

    if first != last {
        return false
    }  
    return doPalindrome(word[sizeOfFirst : len(word)-sizeOfLast])
}

func IsPalindrome(word string) bool {
    s := ""
    s = strings.Trim(word, "\t \r\n\v")
    if len(s) == 0 || len(s) == 1 {
        return false
    }  
    return doPalindrome(s)
}

func main() {
    args := os.Args[1:]
    for _, v := range args {
        ok := IsPalindrome(v)
        if ok {
            fmt.Printf("%s\n", v)
        }  
    }  

}

相關(guān)文章

  • Windows下CMD執(zhí)行Go出現(xiàn)中文亂碼的解決方法

    Windows下CMD執(zhí)行Go出現(xiàn)中文亂碼的解決方法

    本文主要介紹了Windows下CMD執(zhí)行Go出現(xiàn)中文亂碼的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 深入了解Go的HttpClient超時(shí)機(jī)制

    深入了解Go的HttpClient超時(shí)機(jī)制

    在寫?Go?的過程中經(jīng)常對(duì)比這Java和GO語言的特性,踩了不少坑,也發(fā)現(xiàn)了不少有意思的地方,今天就來聊聊?Go?自帶的?HttpClient?的超時(shí)機(jī)制
    2022-11-11
  • 詳解Go中Map類型和Slice類型的傳遞

    詳解Go中Map類型和Slice類型的傳遞

    這篇文章主要為大家詳細(xì)介紹了Go中Map類型和Slice類型的傳遞,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Go?Web編程添加服務(wù)器錯(cuò)誤和訪問日志

    Go?Web編程添加服務(wù)器錯(cuò)誤和訪問日志

    這篇文章主要為大家介紹了Go?Web編程添加服務(wù)器錯(cuò)誤日志和訪問日志的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Golang?中的?條件變量(sync.Cond)詳解

    Golang?中的?條件變量(sync.Cond)詳解

    這篇文章主要介紹了Golang?中的?條件變量(sync.Cond)詳解的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Golang中使用Swagger生成API文檔的流程步驟

    Golang中使用Swagger生成API文檔的流程步驟

    Swagger 是一款強(qiáng)大的 API 文檔生成工具,可以幫助開發(fā)者輕松創(chuàng)建、管理和展示 RESTful API 文檔,在本文中,我們將介紹如何在 Golang 項(xiàng)目中使用 Swagger 來生成 API 文檔,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-07-07
  • golang根據(jù)生日計(jì)算星座和屬相實(shí)例

    golang根據(jù)生日計(jì)算星座和屬相實(shí)例

    這篇文章主要為大家介紹了golang根據(jù)生日計(jì)算星座和屬相的示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Golang實(shí)現(xiàn)http文件上傳小功能的案例

    Golang實(shí)現(xiàn)http文件上傳小功能的案例

    這篇文章主要介紹了Golang實(shí)現(xiàn)http文件上傳小功能的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Golang 實(shí)現(xiàn) Redis系列(六)如何實(shí)現(xiàn) pipeline 模式的 redis 客戶端

    Golang 實(shí)現(xiàn) Redis系列(六)如何實(shí)現(xiàn) pipeline 模式的 redis 客戶端

    pipeline 模式的 redis 客戶端需要有兩個(gè)后臺(tái)協(xié)程負(fù)責(zé) tcp 通信,調(diào)用方通過 channel 向后臺(tái)協(xié)程發(fā)送指令,并阻塞等待直到收到響應(yīng),本文是使用 golang 實(shí)現(xiàn) redis 系列的第六篇, 將介紹如何實(shí)現(xiàn)一個(gè) Pipeline 模式的 Redis 客戶端。
    2021-07-07
  • gorm FirstOrCreate和受影響的行數(shù)實(shí)例

    gorm FirstOrCreate和受影響的行數(shù)實(shí)例

    這篇文章主要介紹了gorm FirstOrCreate和受影響的行數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評(píng)論

吉林市| 钟祥市| 同江市| 鄢陵县| 城固县| 鄂托克前旗| 靖宇县| 阳山县| 沙洋县| 娱乐| 罗城| 班玛县| 凤阳县| 乌鲁木齐县| 凭祥市| 湄潭县| 堆龙德庆县| 商南县| 邵阳县| 遵化市| 马山县| 旬阳县| 西峡县| 大邑县| 洛浦县| 九台市| 泌阳县| 吉林省| 牙克石市| 桐城市| 阳江市| 砚山县| 通江县| 泸定县| 永济市| 襄汾县| 大港区| 广南县| 沁水县| 蒲江县| 时尚|