成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 中15個遞歸函數經典案例解析

開發
在本文中,我們將探索15個遞歸函數的經典案例,從基礎到進階,幫助你理解和掌握遞歸編程。

遞歸是Python編程中一個強大的工具,它允許函數調用自身以解決復雜問題。在本文中,我們將探索15個遞歸函數的經典案例,從基礎到進階,幫助你理解和掌握遞歸編程。

1. 階乘計算

階乘是一個常見的遞歸應用,定義為n! = n * (n-1) * ... * 1。

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(5))  # 輸出: 120

2. 斐波那契數列

斐波那契數列的每一項都是前兩項的和。

def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(10))  # 輸出: 55

3. 漢諾塔問題

漢諾塔是一個經典的遞歸問題,涉及將多個盤子從一個柱子移動到另一個柱子。

def hanoi(n, source, target, auxiliary):
    if n > 0:
        hanoi(n - 1, source, auxiliary, target)
        print(f"Move disk {n} from {source} to {target}")
        hanoi(n - 1, auxiliary, target, source)

hanoi(3, 'A', 'C', 'B')

4. 冪運算

計算a的n次方。

def power(a, n):
    if n == 0:
        return 1
    elif n % 2 == 0:
        return power(a * a, n // 2)
    else:
        return a * power(a, n - 1)

print(power(2, 10))  # 輸出: 1024

5. 數組求和

遞歸地計算數組元素的總和。

def array_sum(arr):
    if not arr:
        return 0
    else:
        return arr[0] + array_sum(arr[1:])

print(array_sum([1, 2, 3, 4]))  # 輸出: 10

6. 字符串反轉

使用遞歸來反轉字符串。

def reverse_string(s):
    if len(s) <= 1:
        return s
    else:
        return reverse_string(s[1:]) + s[0]

print(reverse_string("hello"))  # 輸出: "olleh"

7. 找出數組中的最大值

遞歸地找出數組中的最大值。

def find_max(arr):
    if len(arr) == 1:
        return arr[0]
    else:
        sub_max = find_max(arr[1:])
        return arr[0] if arr[0] > sub_max else sub_max

print(find_max([3, 1, 4, 1, 5, 9]))  # 輸出: 9

8. 二叉樹遍歷

遞歸地遍歷二叉樹。

class Node:
    def __init__(self, val, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def inorder_traversal(node):
    if node is not None:
        inorder_traversal(node.left)
        print(node.val, end=" ")
        inorder_traversal(node.right)

root = Node(1, Node(2), Node(3))
inorder_traversal(root)  # 輸出: 2 1 3

9. 平衡括號檢查

檢查字符串中的括號是否平衡。

def balanced_parentheses(s):
    if not s:
        return True
    if s[0] == '(' and s[-1] == ')':
        return balanced_parentheses(s[1:-1])
    else:
        return False

print(balanced_parentheses("(())"))  # 輸出: True

10. 帕斯卡三角形

生成帕斯卡三角形。

def pascals_triangle(n):
    if n == 1:
        return [1]
    else:
        row = [1]
        prev_row = pascals_triangle(n - 1)
        for i in range(len(prev_row) - 1):
            row.append(prev_row[i] + prev_row[i + 1])
        row.append(1)
        return row

for i in range(1, 6):
    print(pascals_triangle(i))

11. 迷宮路徑

尋找迷宮的解決方案。

def maze_path(x, y, m, n):
    if x == m or y == n:
        return []
    elif x == m - 1 and y == n - 1:
        return [(x, y)]
    else:
        paths1 = maze_path(x + 1, y, m, n)
        paths2 = maze_path(x, y + 1, m, n)
        for path in paths1 + paths2:
            path.insert(0, (x, y))
        return paths1 + paths2

m, n = 3, 3
paths = maze_path(0, 0, m, n)
for path in paths:
    print(path)

12. 字符串排列

生成字符串的所有可能排列。

def string_permutations(s):
    if len(s) == 1:
        return [s]
    else:
        permutations = []
        for i in range(len(s)):
            char = s[i]
            remaining_chars = s[:i] + s[i+1:]
            for permutation in string_permutations(remaining_chars):
                permutations.append(char + permutation)
        return permutations

print(string_permutations('abc'))

13. 八皇后問題

解決八皇后問題。

def solve_n_queens(n):
    solutions = []
    def place_queen(row, cols):
        if row == n:
            solutions.append(cols)
            return
        for col in range(n):
            if all(abs(c - col) not in (0, row - i) for i, c in enumerate(cols[:row])):
                place_queen(row + 1, cols + [col])
    place_queen(0, [])
    return solutions

for solution in solve_n_queens(8):
    print(solution)

14. 斗地主發牌

模擬斗地主游戲發牌過程。

import random

def deal_cards():
    cards = ['3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A', '2'] * 4 + ['小王', '大王']
    random.shuffle(cards)
    hands = {'player1': [], 'player2': [], 'player3': []}
    for i in range(17):
        for player in hands:
            hands[player].append(cards.pop())
    return hands

print(deal_cards())

15. 字符串匹配

檢查一個字符串是否包含另一個字符串。

def string_match(s, pattern):
    if not pattern:
        return True
    if not s:
        return False
    if s[0] == pattern[0]:
        return string_match(s[1:], pattern[1:])
    else:
        return string_match(s[1:], pattern)

print(string_match("hello", "he"))  # 輸出: True

實戰案例分析:漢諾塔問題

漢諾塔問題是一個典型的遞歸案例,涉及到將多個圓盤從一個柱子移動到另一個柱子上,但每次只能移動一個圓盤,且大盤不能放在小盤之上。

def hanoi(n, source, target, auxiliary):
    if n > 0:
        # 將n-1個圓盤從source移動到auxiliary
        hanoi(n - 1, source, auxiliary, target)
        # 移動最大的圓盤從source到target
        print(f"Move disk {n} from {source} to {target}")
        # 將n-1個圓盤從auxiliary移動到target
        hanoi(n - 1, auxiliary, target, source)

# 示例調用
hanoi(3, 'A', 'C', 'B')

這個例子展示了如何通過遞歸解決復雜問題,同時也體現了遞歸的分治策略。

使用技巧:

  • 在面對問題時,思考是否可以通過分解為子問題來解決,這是遞歸的一個良好起點。
  • 在設計遞歸函數時,始終定義清晰的基線情況和遞歸情況。

遞歸是編程中一個強大的概念,但使用得當才能發揮其真正的潛力。希望這篇文章能幫助你更好地掌握和應用遞歸技術!

責任編輯:趙寧寧 來源: 手把手PythonAI編程
相關推薦

2024-12-19 16:00:00

Pythonwhile 循環

2024-03-25 08:00:00

C++遞歸函數

2024-05-30 12:27:42

Python代碼

2009-09-03 09:16:35

C#遞歸函數

2012-06-25 17:00:44

2009-10-29 10:20:19

ADO.NET使用

2019-08-29 23:02:24

Python解析式表達列

2018-10-25 14:47:53

分析消費數據挖掘

2024-09-11 16:30:55

Python函數編程

2015-03-11 10:00:47

響應式網頁網頁設計設計建議

2023-04-09 23:09:59

Go語言函數

2021-07-01 09:43:44

Python函數參數

2020-05-20 10:35:53

Python開發函數

2010-09-06 16:36:20

DB2快照函數

2010-07-30 14:14:11

DB2快照函數

2009-09-18 09:35:36

C# CLR

2024-12-02 11:34:15

Python面向對象編程

2023-07-03 17:15:12

系統架構設計

2017-10-25 13:04:10

數據可視化信息可視化數據圖表

2024-07-05 10:45:09

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产视频欧美 | 亚洲码欧美码一区二区三区 | 亚洲综合在| 亚洲一页| 青青草网| 欧美日高清 | 国产男女猛烈无遮掩视频免费网站 | 日本在线小视频 | 福利二区 | 免费国产一区二区 | 亚洲不卡视频 | 天天操 夜夜操 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 国产精品久久久久久久久久免费看 | 久久综合久色欧美综合狠狠 | 国内精品视频一区二区三区 | 亚洲天堂影院 | 欧美性网 | 国产精品久久久久久久久久 | 五月婷婷丁香婷婷 | 精品国产乱码久久久久久牛牛 | 亚洲乱码一区二区三区在线观看 | av中文在线 | 国产高清区 | 蜜桃在线一区二区三区 | 日本不卡一区二区三区在线观看 | 日韩精品一区二区三区视频播放 | 成人中文字幕在线观看 | 欧美日韩电影免费观看 | 亚洲黄色一级毛片 | 日韩有码在线播放 | 亚洲精品黑人 | 嫩呦国产一区二区三区av | 国产精品一区二区三区四区 | 日产精品久久久一区二区福利 | 天天成人综合网 | 国产色婷婷精品综合在线手机播放 | www.日本精品 | 精品一二区 | 日本小视频网站 | 久久久久成人精品免费播放动漫 |