递归的理解以及与循环,迭代的区别(Python 示例)

目录

1,什么是递归

1.1,递归与循环的区别

2,递归函数实例

2.1,Fibonacci sequence(斐波那契数列)

2.2,Collatz sequence      


1,什么是递归

        递归最初给我的感觉就是循环嵌套调用(并不准确),对于递归这种思想,可以从递归函数来理解。先来看看递归函数的定义:

        编程语言中,函数Func(Type a,……)直接或间接调用函数本身,则该函数称为递归函数。

        在数学上,关于递归函数的定义如下:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值X0,其函数值f(x0)由f(f(x0))决定,那么就称f(x)为递归函数。

1.1,递归与循环,迭代的区别

        注意上文红字【调用函数本身】,递归思想也有循环,但与循环有所区别,两种的区别我个人理解如下:

【递归】:需要求一个递归函数的值,就要调用这个递归函数,调用递归函数后又要调用递归函数......直到最后的递归函数得到一个确定的值。这时候就需要逆序,可以得到倒数第二个递归函数的值,然后得到倒数第三个递归函数的值......最后就能得到你最初始想要求的递归函数的值。

【循环】:循环得到一个值时(比如1+2+...+10),这样需要慢慢两个数相加,但加到最后时就可以直接得到结果了(死循环例外),就结束了循环。

【迭代】:重复反馈过程的活动,其目的通常是为了接近或达到所学的目标或结果

 

2,递归函数实例

        下面通过两个递归实例来更好的理解递归的思想。

2.1,Fibonacci sequence(斐波那契数列)

        斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……

        在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1) + F(n-2)(n>=3,n∈N*)

【递归实现】

def fib(x):
    if x <2:
        return 0 if x==0 else 1
    else:
        return fib(x - 1) + fib(x - 2)

print(fib(6))

上面的函数表明了一个数列:a0=0, a1=1, a2=1, a3= 2, a4=3, a5=5, a6=8......

执行后得到的结果如下:

【迭代实现】

def fib(x):
    n1 = 1
    n2 = 1
    n3 = 1

    while x-2 > 0:
        n3 = n2 + n1
        n1 = n2
        n2 = n3
        x -= 1
    return n3

num = int(input('请输入一个正整数:'))
print(fib(num))

 结果如下:

迭代像在通过数列的递推公式一步步计算,在数据很小的情况没什么影响,若是第50位,迭代很快给出结果,递归方式计算时间更长。通常来说,大量数据情况下,递推方式更费时,占用内存。要合理使用迭代与递归。

 

2.2,Collatz sequence      

        编写一个名为collatz()的函数,它有一个名为number 的参数。如果参数是偶数,那么collatz()就打印出number// 2,并返回该值。如果number 是奇数,collatz()就打印并返回3 * number + 1。然后编写一个程序,让用户输入一个正整数,并不断对这个数调用collatz(),直到函数返回值1

def collatz(num):
    if num == 1:
        return 0
    elif num%2 == 0:
        print(num//2)
        return collatz(num//2)
    elif num%2 == 1:
        print(3*num+1)
        return collatz(3*num+1)

print('Enter number')
a=int(input())
print('The Collatz ')
collatz(a)

执行结果如下:

递归的理解以及与循环,迭代的区别(Python 示例)_第1张图片

你可能感兴趣的:(Python)