递归算法:
简而言之就是一种函数调用函数自身来完成算法设计的方法。如果一个函数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'))