递归思想
程序调用自身的编程技巧称为递归( recursion)。
递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。
这类问题虽则本身没有明显的递归结构,但用递归求解比迭代求解更简单,如Hanoi问题。
(3)数据的结构形式是按递归定义的。
如二叉树、广义表等,由于结构本身固有的递归特性,则它们的操作可递归地描述。
def fib(n):
'''
fibonacci问题
'''
if n < 2:
return 1
else:
return fib(n-1) + fib(n-2)
print([fib(n) for n in range(5)])
leetcode206
class Solution:
def reverseList(self, head, prev = None):
"""
:type head: ListNode
:rtype: ListNode
"""
# 尾递归
if not head:
return prev
curr, head.next = head.next, prev
return self.reverseList(curr, head)
动态规划
入门篇教你彻底学会动态规划