欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

func main() {
   recursion()
}


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

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

數(shù)字階乘
以下是一個例子,它計算階乘用于使用一個遞歸函數(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))
}


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

Factorial of 15 is 2004310016

斐波那契系列
以下是另一個例子,其產(chǎn)生斐波串聯(lián)使用一個遞歸函數(shù)由給定一個數(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))
    }   
}


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

0 1 1 2 3 5 8 13 21 34

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

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

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

復(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)文章

  • 深入淺出Golang中select的實現(xiàn)原理

    深入淺出Golang中select的實現(xiàn)原理

    在go語言中,select語句就是用來監(jiān)聽和channel有關(guān)的IO操作,當IO操作發(fā)生時,觸發(fā)相應(yīng)的case操作,有了select語句,可以實現(xiàn)main主線程與goroutine線程之間的互動。本文就來詳細講講select的實現(xiàn)原理,需要的可以參考一下
    2022-08-08
  • Golang如何編寫內(nèi)存高效及CPU調(diào)優(yōu)的Go結(jié)構(gòu)體

    Golang如何編寫內(nèi)存高效及CPU調(diào)優(yōu)的Go結(jié)構(gòu)體

    這篇文章主要介紹了Golang如何編寫內(nèi)存高效及CPU調(diào)優(yōu)的Go結(jié)構(gòu)體,結(jié)構(gòu)體是包含多個字段的集合類型,用于將數(shù)據(jù)組合為記錄
    2022-07-07
  • 教你一招完美解決vscode安裝go插件失敗問題

    教你一招完美解決vscode安裝go插件失敗問題

    VSCode是我們開發(fā)go程序的常用工具,但是安裝VSCode成功后,創(chuàng)建一個.go文件居然提示錯誤了,所以下面下面這篇文章主要給大家介紹了如何通過一招完美解決vscode安裝go插件失敗問題的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • goland 搭建 gin 框架的步驟詳解

    goland 搭建 gin 框架的步驟詳解

    這篇文章主要介紹了goland 搭建 gin 框架的相關(guān)知識,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Golang常用包使用介紹

    Golang常用包使用介紹

    標準的Go語言代碼庫中包含了大量的包,并且在安裝Go的時候多數(shù)會自動安裝到系統(tǒng)中。我們可以在$GOROOT/src/pkg目錄中查看這些包。下面簡單介紹一些我們開發(fā)中常用的包
    2022-09-09
  • 解決goxorm無法更新值為默認值的問題

    解決goxorm無法更新值為默認值的問題

    這篇文章主要介紹了解決goxorm無法更新值為默認值的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go并發(fā)的方法之goroutine模型與調(diào)度策略

    Go并發(fā)的方法之goroutine模型與調(diào)度策略

    在go中,協(xié)程co-routine被改為goroutine,一個goroutine只占幾kb,因此可以有大量的goroutine存在,另一方面goroutine 的調(diào)度器非常靈活,本文給大家介紹下Go并發(fā)的方法之goroutine模型與調(diào)度策略,感興趣的朋友一起看看吧
    2021-11-11
  • Go動態(tài)調(diào)用函數(shù)的實例教程

    Go動態(tài)調(diào)用函數(shù)的實例教程

    本文主要介紹了Go動態(tài)調(diào)用函數(shù)的實例教程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • gtoken替換jwt實現(xiàn)sso登錄的排雷避坑

    gtoken替換jwt實現(xiàn)sso登錄的排雷避坑

    這篇文章主要為大家介紹了gtoken替換jwt實現(xiàn)sso登錄的排雷避坑,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Go中的條件語句Switch示例詳解

    Go中的條件語句Switch示例詳解

    Go的switch的基本功能和C、Java類似,switch 語句用于基于不同條件執(zhí)行不同動作,每一個 case 分支都是唯一的,從上至下逐一測試,直到匹配為止,對Go條件語句Switch相關(guān)知識感興趣的朋友一起看看吧
    2021-08-08

最新評論