递归函数的小案例(基于python 和 golang 语言)

it2024-10-22  40

递归

递归顾名思义就是自己调用自己,当初自己学习python的时候写过一些小案例,觉得挺有意思,今天拿出来再写一遍!

注:本次的递归案例都是一些经典的案例 为作者记录自己的学习用,如果有不对的地方,欢迎指教!

个人觉得递归只要找准三个要素,理清逻辑,就能写出一个完整的递归函数!

必须要有结束条件问题的规模在不断减小自己调用自己

下面举三个例子说明递归: 例1用户自己输入一个数,求阶乘! Golang语言实现

// @author:来瓶安慕嘻 // @time:2020-10-21 15:10:34 // @file:递归.go // @开始美好的一天吧 ('μ') package main import "fmt" // 计算n的阶乘 func f(n uint64)uint64{ if n<=1{ return 1 } return n * f(n-1) } func main() { var n uint64 fmt.Print("请输入你想输入的阶乘数:") fmt.Scan(&n) ret := f(n) fmt.Printf("%d的阶乘为%v",n,ret)

python语言实现

# -*- coding = utf-8 -*- # @Time:2020-10-21 16:00 # @Author:来瓶安慕嘻 # @File:递归.py # @开始美好的一天吧 @Q_Q@ def jiecheng(n): if n==1: return 1 return n*jiecheng(n-1) n = input("请输入你想计算的阶乘数:") print(jiecheng(int(n)))

例2斐波那契数列 斐波那契数列的百度百科定义(链接) 斐波那契数列指的是这样一个数列:0,1,1,2,3,5,8,13,21,34,… 这个数列从第3项开始,每一项都等于前两项之和。 Golang语言

package main import "fmt" func feibo(n int)int { if n==1{ return 0 } if n==2{ return 1 } return feibo(n-1)+feibo(n-2) } func main() { fmt.Println(feibo(10)) //答案是34 }

Python语言

def feibonaqi(n): if n==1: return 0 if n==2: return 1 return feibonaqi(n-1)+feibonaqi(n-2) print(feibonaqi(10)) # 答案是34

例3爬台阶:有一楼梯共n级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上n级,共有多少走法?

分析: 不管前面怎么走,当一个人走到最后时,面临两种情况:1.只有一个台阶,那么只有一种走法 。 2.还剩两个台阶,那么还有两种走法 ok!那么只要利用递归计算只剩一步时前面的走法+只剩两步时前面的走法即return climbStep(n-1)+climbStep(n-2)。以5为例,计算一下有多少种走法。 1 1 1 1 1 1 1 1 2 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 2 1 2 2 2 1 总共有8种走法!

Golang语言实现

package main import "fmt" //上台阶:有一楼梯共n级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上n级,共有多少走法? func climblader(n int)int{ if n ==1 { return 1 } if n==2 { return 2 } return climblader(n-1)+climblader(n-2) } func main() { ret := climblader(6) fmt.Println(ret) }

Python

def climbStep(n): if n==1: return 1 elif n==2: return 2 return climbStep(n-1)+climbStep(n-2) print(climbStep(5))
最新回复(0)