递归排序及例题分析

本文深入探讨递归算法,以Fibonacci数列和汉诺塔问题为例,详细解析递归算法的原理与实现,适合初学者理解递归概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

递归算法:

简而言之就是一种函数调用函数自身来完成算法设计的方法。如果一个函数f(x),可以通过调用自己来完成算法的设计,这种方法就称为递归算法。Fibonacci(斐波那契数列)便是典型的递归算法例子。
Fibonacci 数列的定义如下:

Fib(n) ={0,1,1,2,3,5,8,13,......}

第n项为其前两项之和,即Fib(n) =Fib(n-1)+Fib(n-2) n>2
代码实现;

def Fibonacci(n):
    if n == 1:
        return 0
    elif n == 2:
        return 1
    else:
        return Fibonacci(n-1)+Fibonacci(n-2)
n = int(input("输入:"))
print(Fibonacci(n))

关于递归问题,汉诺塔问题也是典型例题之一。在这里首先简述一下和为汉诺塔问题:现有三根柱子 A,B,C,在柱子 A 上,
从上到下按照由小到大的顺序放置了 n 个圆盘,每个圆盘都比它下面的圆盘小。现在,需要将 n 个圆盘从柱子 A 上移动到另外一根柱子 C 上,每次移动的时候必须保证小圆盘在大圆盘的上方。假定有n个圆盘,应该如何移动?
如果n=1时,只需要将A上面的圆盘直接移动到C即可。
如果n>1时,我们需要将A上面的n-1个圆盘,借助C转移到B,然后再将A上面的最后一个圆盘移动到C
最后,在将B上n-1个圆盘,借助C转移到A,而此时,就可以进入递归循。
代码实现:

def  move(n,a,b,c):
    if n ==1:
        print(a,'-->',c)
    else:
        move(n-1,a,c,b) #A柱子上有n个盘子,将A上面的n-1个盘子,通过c,移动到b
        move(1,a,b,c)   #A柱子上最后的一个盘子,移动到c
        move(n-1,b,a,c) #b柱子上n-1个盘子,通过a,移动到c
    return  ‘ ’
print(move(3,'A','B','C'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值