日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

递归的思路

發布時間:2023/12/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 递归的思路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 一、什么是方法遞歸?
  • 二、什么場景下能用遞歸?
  • 三、如何寫出遞歸代碼(**重點**)?
    • 1.先考慮這個函數的==終止條件==
    • 2.假設這個函數已經寫好了(==注意這個方法的語義==)
  • 總結


前言

今天給老鐵們回顧一下遞歸的思路以及方法,也是給自己的一個歸納總結。

一、什么是方法遞歸?

所謂的方法遞歸,就是在一個方法(函數)執行的內部自己調用了自己的過程,稱之為 “遞歸” 。

遞歸分為兩個子過程:
遞過程:函數不斷地調用自身,直到走到函數的終止條件,第一階段結束。
歸過程:函數不斷地返回的過程。

例如, 我們求 N! 起始條件: N = 1 的時候, N! 為 1. 這個起始條件相當于遞歸的結束條件. 遞歸公式: 求 N! ,
直接不好求, 可以把問題轉換成 N! => N * (N-1)!

示例:遞歸求N的階乘

public static void main(String[] args) {int n = 5;int ret = factor(n);System.out.println("ret = " + ret); } public static int factor(int n) {if (n == 1) {return 1;}return n * factor(n - 1); // factor 調用函數自身 } // 執行結果 ret = 120

二、什么場景下能用遞歸?

a.一個大問題(這個方法的功能)可以拆分成若干個子問題的解.

b.拆分后的子問題和原問題除了數據規模不同,解決思路完全相同.

c.必須存在遞歸的終止條件(不會無限拆分下去,一定能走到底~).

(看不懂先看下面(●ˇ?ˇ●))

三、如何寫出遞歸代碼(重點)?

1.先考慮這個函數的終止條件

比如上面的栗子:求N的階乘。
拿求5的階乘做例子:

我們把大問題(5的階乘)一直拆分到1的時候,問題無法繼續拆分下去了,這個子問題就是這個遞歸的最終條件。
所以我們寫代碼的時候,可以先把最終條件寫上:

if (n == 1) {return 1;}

2.假設這個函數已經寫好了(注意這個方法的語義)

在寫遞歸函數的時候,千萬不要糾結這個函數內部是如何實現的,而是要注意這個函數有什么功能(假設這個函數別人已經寫好了),我們把它當作一個黑盒子,你只是去調用這個函數罷了。

public static int factor(int n)

比如這個函數只能傳入一個n,目前我們只能知道這個n是多少,而n的階乘等于n* [(n-1)!],但是我們并不知道n-1的階乘是多少,那么就調用這個別人寫好的“黑盒子”。這個黑盒子的功能可以實現某個數的階乘。

n * factor(n - 1) // n*黑盒子

說白了就是,把這個factor函數當作別人已經寫好了,你只需要關注如何去調用這個方法去輔助你解決問題就可以了!

總結

寫出遞歸其實=終止條件+利用黑盒子去解決剩下的問題,注意傳入的參數就可以很快把遞歸代碼寫出來(●ˇ?ˇ●)。老鐵們如果有幫助的話記得三連喲~

總結

以上是生活随笔為你收集整理的递归的思路的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。