3、递归

递归

如果使用循环,程序的性能可能更高;如果使用递归,程序可能更容易理解。如何选择要看什么对你来说更重要。

1、基线条件和递归条件

每个递归函数都有两部分:基线条件( base case)和递归条件( recursive case

递归条件指的是函数调用自己,而基线条件则指的是函数不再调用自己,从而避免形成无限循环。 

 

2、调用栈

使用栈虽然很方便,存储详尽的信息可能占用大量的内存。每个函数调用都要占用一定的内存,如果栈很高,就意味着计算机存储了大量函数调用的信息。在这种情况下,需要转换思路:

重新编写代码,转而使用循环。

使用尾递归。这是一个高级递归主题,不在本书的讨论范围内。另外,并非所有的语言都支持尾递归。 

 

3、代码示例

 1 # 计算阶乘
 2 def fibo(count):
 3     if count == 1:
 4         return 1
 5     else:
 6         return count*fibo(count-1)
 7 
 8 if __name__ == '__main__':
 9     n = 10
10     result = fibo(10)
11     print("最后的结果为: %s" % result)

 

4、小结

递归指的是调用自己的函数。
每个递归函数都有两个条件:基线条件和递归条件。
栈有两种操作:压入和弹出。
所有函数调用都进入调用栈。
调用栈可能很长,这将占用大量的内存。

 

5、应用场景

应用广泛,经典的问题有

 Fibonacci数列

 阶乘

 汉诺塔问题

 排列组合

posted @ 2020-10-30 15:34  Dammond  阅读(111)  评论(0)    收藏  举报