【GO】簡單遞歸案例實現求斐波那契數列和天然值求和

斐波那契數列

先看一個案例就能夠肯明確的看出其中的規律微信

1 ,1 ,2 , 3 , 5 , 8 , 13…spa

其實就是除了第0項和第1項返回的是1,其他的返回的都是前倆項之和code

用遞歸實現斐波那契數列

package main

import "fmt"

func main() { 
	for i := 0; i <= 10; i++ { 
		fmt.Println(GetFibonacci(i))
	}
}

/** 遞歸就是本身調本身 遞歸必定要有終止條件,不然就會無限循環 */
func GetFibonacci(n int) int { 
	// 若是是第0項或者第2項直接返回1
	if n == 0 || n == 1 { 
		return 1
	} else { 
		return GetFibonacci(n-1) + GetFibonacci(n-2)
	}
}

求出第6項的值
在這裏插入圖片描述遞歸

求斐波那契數列的原理

好比說咱們要求出第5項的值,那麼就會走到else的代碼中
第五項會找第4項和第3項的值
第3項會找 2和1項的值 這個時候第1項直接返回的是1
第2會找第0和1項都會返回1
而後把全部的1加起來就是第5項的值
在這裏插入圖片描述圖片

使用循環實現第n個天然數之和

/** 使用循環來實現天然數之和 */
package main

import "fmt"

func main() { 
	fmt.Println(GetFibonacci(6))
	sum := GetNum(10)
	fmt.Println(sum)
}
func GetNum(n int) (sum int) { 
	for i := 1; i <= n; i++ { 
		sum += i
	}
	return
}

使用遞歸來實現天然數求和

/** 使用遞歸來實現天然數求和 */
package main

import "fmt"

func main() { 
	getRecursion := GetRecursion(10)
	fmt.Println(getRecursion)
}

func GetRecursion(n int) (sum int) { 
	if n == 1 { 
		return 1
	} else { 
		return n + GetRecursion(n-1)
	}
}

本篇文章全部的源碼,可直接執行

package main

import "fmt"

func main() { 
	fmt.Println(GetFibonacci(6))
	sum := GetNum(10)
	fmt.Println(sum)
	getRecursion := GetRecursion(10)
	fmt.Println(getRecursion)
}

/** 遞歸就是本身調本身 遞歸必定要有終止條件,不然就會無限循環 */
func GetFibonacci(n int) int { 
	// 若是是第0項或者第2項直接返回1
	if n == 0 || n == 1 { 
		return 1
	} else { 
		return GetFibonacci(n-1) + GetFibonacci(n-2)
	}
}

/** 使用循環來實現天然數之和 */
func GetNum(n int) (sum int) { 
	for i := 1; i <= n; i++ { 
		sum += i
	}
	return
}

/** 使用遞歸來實現天然數求和 */
func GetRecursion(n int) (sum int) { 
	if n == 1 { 
		return 1
	} else { 
		return n + GetRecursion(n-1)
	}
}

最終打印的三組數據
在這裏插入圖片描述ci

博主微信歡迎交流

在這裏插入圖片描述

相關文章
相關標籤/搜索