C語言學習之遞迴

2022-08-21 12:03:16 字數 1749 閱讀 9082

學習c語言到遞迴時,還記得那個用來拋磚引玉的例子: "從前呀,有座山,山里有個老和尚給乙個小和尚講故事,講的什麼故事呢?從前呀,有座山,山里有個老和尚給乙個小和尚講故事,講的什麼故事呢?從前呀......" 這個故事估計是可以說到世界毀滅 。不難發現整個故事都在迴圈乙個語句 "從前呀,有座山,山里有個老和尚給乙個小和尚講故事,講的什麼故事呢?",那麼遞迴的定義呢就和這差不多了。

利用遞迴,我們可以完成許多事情。比如傳統的 1+2+3+4+5+......+99+100 這樣的求和就可以利用遞迴來完成

#include"

stdio.h"//

遞迴int recurrence(int

n)int main(void

)

說到遞迴,少不了著名的斐波那契數列,同樣的它也是乙個遞迴的典型例子。

表示式: f[n]=f[n-1]+f[n-2](n>=2,f[0]=0,f[1]=1)

由表示式,我們就可以寫出對應**

#include"

stdio.h"//

斐波那契數列

int recurrence(int

n)int main(void

)

又是乙個典型的粟子:

猴子第一天摘了若干個桃子,當即吃了一半,還不解饞,又多吃了乙個;第二天,吃剩下的桃子的一半,還不過癮,又多吃了乙個;以後每天都吃前一天剩下的一半多乙個,到第10天想再吃時,只剩下乙個桃子了。問第一天共摘了多少個桃子?

相信大家都 ac 過這道例題,這猴子也是挺厲害的,第一天竟然吃了700多個桃子,amazed...,此題不止有遞迴一種方法,你儘管可以用 while 、for 迴圈來 a.大多數遞迴題可以用迴圈來a,說白了遞迴本身就是迴圈。好像我在說廢話。。。。

根據題意,可以寫出對應的**:

#include"

stdio.h"//

猴子吃桃問題

int recurrence(int

n)int main(void

)

運用遞迴,就感覺是在套用公式。這麼說遞迴其實很簡單的,我們反過來做此題。就說猴子是摘桃,第一天摘了乙個、第二天摘了前一天加乙個的二倍、以後的每一天都如此,第10天後一共摘1534個桃子,問這10天每天分別有多少桃子?

不難得出,這個就是上個粟子的逆向轉換而已。則相應**如下:

#include"

stdio.h"//

猴子摘桃問題

int recurrence(int

n)int main(void

)

只是對之前的**進行了少許的修改,已知第10天摘了1534個桃子,那麼當 i = 10 時, 返回 1534 這個值;否則是呼叫遞迴運算,遞迴也就是對題意進行了逆向的推算。

故做題時,先審清題意,理好思路,再動手去做就游刃有餘了,遞迴亦如此。

C語言學習筆記 遞迴函式

在本章遞迴函式的學習過程中,我們將舉出幾個典型的遞迴例子,以及三種理解遞迴執行的方法。include void fun int n int main 這就是乙個簡單的遞迴函式,要注意的是在函式內部再次呼叫的時候引數變成了n 1,這樣的目的是使函式獲得迴圈控制變數的變化,以及迴圈停止的條件。void ...

C語言學習之常量

1.整型常量 像123這一型別常量如無特別說明都是int型別常量。long型常量要以l或l結尾,比如123456789l。無符號常量要以u或u結尾。整型常量除了用十進位制表示外,還可以用八進位制和十六進製制表示,八進位制前面加0 零 十六進製制前面加0x。2.字元常量 字元常量用 表示,比如 y 本...

C語言學習之extern C

extern c 的主要作用就是為了能夠正確實現c 呼叫其他c語言 加上extern c 後,會指示編譯器這部分 按c語言的進行編譯,而不是c 的。由於c 支援函式過載,因此編譯器編譯函式的過程中會將函式的引數型別也加到編譯後的 中,而不僅僅是函式名 而c語言並不支援函式過載,因此編譯c語言 的函式...