今天來談談遞迴程式設計,我想參與過程式設計經歷的,或者學過程式設計的都應該了解遞迴,遞迴思想在解決一些問題上顯得尤為方便,能發出意想不到的效果,但是遞迴程式設計顯然難度比較大,沒有非常豐富的程式設計經驗或者對遞迴有過很深的理解,不能隨手就寫出遞迴的**。所以今天就來談談遞迴怎麼用?
遞迴的程式設計模式就是乙個函式呼叫本身,同時加上一些條件判斷進行限制。基本上這兩個部分就可以組成乙個遞迴**。但是偏偏是這兩個部分卻很難去寫出來。
事實上遞迴問題你會發現乙個現象,那就是基本上遞迴方法可以解決的問題都有一種「推進關係」,我把這種關係解釋為,上一層跟下一層有關係,是一種層層推進的聯絡,也就是問題的解決是一種層層推進的結果,而不是經過複雜的過程得到結果。
我希望,如果你對遞迴程式設計也很感興趣的話可以多多了解一下這方面的問題,總結一下規律,將來遇到可以使用遞迴程式設計解決的問題可以聯想到遞迴思想。
下面介紹一些問題的遞迴程式設計解決:
用迴圈和遞迴分別求 ∑100 (求1到100的和)
#迴圈語句完成:
defsum1
(num)
: sum2=
0for i in
range(1
,num+1)
: sum2+=i
return sum2
print
(sum1(
100)
)#遞迴完成
defsum_a
(num1)
:if num1==1:
return
1else
:return num1+sum_a(num1-1)
print
(sum_a(
100)
)
用迴圈和遞迴分別求 10!(階乘)
#迴圈完成
defproduct1
(num)
: product=
1for i in
range(1
,num+1)
: product=product *i
return product
print
(product1(10)
)#遞迴完成
defproduct2
(num)
:if num==1:
return
1else
:return num *product2(num-1)
print
(product2(10)
)
看過上面兩段**應該都能發現遞迴程式設計**竟然那麼簡潔,當然也更難理解,上面兩個問題其實算是遞迴應用當中的一類典型的問題,這裡就有我上面說的「推進關係」,每一層遞迴函式的呼叫與上一層有關係,當然這是一種「直接關係」,下面還有一種衍生關係,待會介紹。
遞迴推斐波那契數列
def
fabonacci
(n):
''' n為斐波那契數列 '''
if n <=2:
''' 數列前兩個數都是1 '''
v =1return v # 返回結果,並結束函式
v = fabonacci(n-1)
+fabonacci(n-2)
# 由資料的規律可知,第三個數的結果都是前兩個數之和,所以進行遞迴疊加
return v # 返回結果,並結束函式
print
(fabonacci(15)
)# 610 呼叫函式並列印結果
有沒有發現這個函式呼叫與上面兩種有一些差別,是的,這種問題用遞迴思路去解決很多時候更難理解,它更像是一種」衍生「。
這裡我倒想說,像上面這種型別的問題其實最後都是一種「由最初到最終」,我們需要最初的條件判定加上最終的函式呼叫表示問題的表現形式就可以解決問題。比如上面的問題,我們對數列第乙個和第二個定義好,然後用函式呼叫表示數列規律,由一二生三,由二三生四,最後就可以解決這個問題。
古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
def
f(number)
:if number==1:
return
1if number==2:
return
1else
: count = f(number-1)
+f(number-2)
return count
上面這個問題是不是也是一種「由最初到最終」的思路呢?也是的,所以在進行遞迴程式設計時,我們需要去理解那種推進關係,當我們設定好初始條件,利用問題的推進規律來進行程式設計,表示出這種規律,就可以達到「一生二,二生三,三生萬物的目的」。 遞迴思想程式設計
將非負十進位制整數n轉換成b進製。其中b 2 16 基本要求 1.完成題目1,採用遞迴思想程式設計解決問題,要求設計出遞迴模型 遞迴出口和遞迴體的函式式 2.程式設計風格良好,實現功能測試 確保程式的健壯性。3.畫出遞迴樹或者遞迴棧的呼叫過程。4.實現非遞迴方法。return n 0 system ...
程式設計思想之遞迴
我之前寫過關於遞迴演算法 的博文,但作為程式設計思想系列的文章不得不再對它進行進一步深入的剖析。因為它是一種簡單 常用又重要的一種程式設計思想。舉乙個通俗的例子 有乙個8倆重的蘋果要你切成重量相等的若干份,每乙份的重量不能大於1倆。你肯定會想到這樣做 1.第一刀先把乙個蘋果切成重量均等的2份a1和a...
遞迴 運用遞迴思想解題
標籤 c語言 遞迴 by 小威威 遞迴思想,就是通過不斷呼叫自己直到滿足某一條件為止。對於遞迴的定義,我在這裡就不在闡述了,書上都寫的很明白,最典型的例子就是 從前山上有乙個老和尚和乙個小和尚 下面我就直接上題目,通過題目來進一步了解遞迴,學習遞迴。典例1 給出乙個陣列,長度為n,編號為0 n 1 ...