這段程式確實難懂,首先兩個基本知識點需要掌握,1、static 關鍵字的作用,2、遞迴。這裡假設你已經掌握這兩個知識點(不懂百度),下面分析 sub 函式
分兩部分
第一部分 if (n ==1) ,迴圈找到一個5的倍數的整數,並+1 後返回(第一次返回6,第二次返回11,以此類推)
第二部分else,先不考慮遞迴情況,這部分的意思是迴圈找到一個能被4整除的值t,並返回 t/4 * 5 + 1,也就是 sub 函式實現的功能
遞迴是每次以n-1 做為引數,這裡可以判斷出,main函數里面傳遞的引數實際上是遞迴的層數
為了理解遞迴的意圖,可以先忽略迴圈(即:不管迴圈多少次,總之返回的值可以被4整除),再忽略那些不滿足條件的值,假設滿足條件的值是x(x由第一部分得到的值,即 6,11,16,21 ...)那麼遞迴返回的過程是(主意:只關注最後返回過程即可明白意圖)
x可以被 4整除, 返回x1 = x/4*5+1,
x1 可以被4整除, 返回x2= x1/4*5+1,
x2 可以被4整除,返回x3= x2/4*5+1
...
即一個數可以被4整除,經過運算後還能被4整除,經過運算後還能被4整除 ...
這就是意圖了,那麼這個意圖明顯是個迴圈測試的過程,這個意圖用遞迴演算法確實很晦澀,可以用另外一個非遞迴版本程式的來表達這個意圖
這段程式確實難懂,首先兩個基本知識點需要掌握,1、static 關鍵字的作用,2、遞迴。這裡假設你已經掌握這兩個知識點(不懂百度),下面分析 sub 函式
分兩部分
第一部分 if (n ==1) ,迴圈找到一個5的倍數的整數,並+1 後返回(第一次返回6,第二次返回11,以此類推)
第二部分else,先不考慮遞迴情況,這部分的意思是迴圈找到一個能被4整除的值t,並返回 t/4 * 5 + 1,也就是 sub 函式實現的功能
遞迴是每次以n-1 做為引數,這裡可以判斷出,main函數里面傳遞的引數實際上是遞迴的層數
為了理解遞迴的意圖,可以先忽略迴圈(即:不管迴圈多少次,總之返回的值可以被4整除),再忽略那些不滿足條件的值,假設滿足條件的值是x(x由第一部分得到的值,即 6,11,16,21 ...)那麼遞迴返回的過程是(主意:只關注最後返回過程即可明白意圖)
x可以被 4整除, 返回x1 = x/4*5+1,
x1 可以被4整除, 返回x2= x1/4*5+1,
x2 可以被4整除,返回x3= x2/4*5+1
...
即一個數可以被4整除,經過運算後還能被4整除,經過運算後還能被4整除 ...
這就是意圖了,那麼這個意圖明顯是個迴圈測試的過程,這個意圖用遞迴演算法確實很晦澀,可以用另外一個非遞迴版本程式的來表達這個意圖