C語言中遞迴的實際應用與經典問題

2022-09-24 17:12:14 字數 1273 閱讀 4969

目錄

遞迴簡單的來說就是在函式中呼叫自己

它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的程式設計客棧問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的**量。

遞迴的兩個必要條件:

存在限制條件,當滿足這個限制條件的時候,遞迴便不再繼續。

每次遞迴呼叫之後越來越接近這個限制條件。

void recursion(引數0)

else

}int tmp(int n)

else

}斐波那契數列指的是這個數列從第3項開始,每一項都等於前兩項之和。

遞迴演算法:

int fibonacci(int n)

}非遞迴方法:

int fibonacci(int n)

return c;

}漢諾塔問題**:

漢諾塔(又稱河內塔)問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片**圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。

這裡我們使用的方法是從特殊到一般,這也是數學問題中常用的方法。

首先我們設計乙個盤,那就直接把這個盤從自身柱子移到目標柱。

其次我www.cppcns.com們看兩個盤,三根柱子兩個盤,先將上面的柱子移動到中間柱,然後將最下面的柱子移動到目標柱,最後中間的柱子。

再來看多個盤

void hanno(int n, char a, char b, char c)

else

}乙隻青蛙可以一次跳 1 級台階或一次跳 2 級台階,例如:跳上第一級台階只有一種跳法:直接跳 1 級即可。跳上www.cppcns.com兩級台階,有兩種跳法: 每次跳 1 級,跳兩次; 或者一次跳 2 級.問要跳上第 n 級台階有多少種跳法?

解題思路

我們設台階數字n;

當n=1時,當然只有1種跳法;

當n=2時,青蛙可以跳2次1層和跳1次2層;

當n=3時,當有3層台階時,青蛙可以選擇先跳1層,剩下2層台階,所以此時就是有2層台階時的跳法,有2種;當青蛙選擇第一次跳2層台階時,剩下1層台階,此時有1層台階時的跳法,所以3層台階時的方法是:2層台階的方法 + 1層台階的方法。

#include

int frog(int n)

if(n == 2)

return frog(n-1) + frog(n-2);

}int main()

C語言中》 的實際用途

運算子 含義描述 左移用來將乙個數的各二進位制位全部左移n位,高位捨棄,低位補0。右移將乙個數的各二進位制位右移n位,移到右端的低位被捨棄,對於無符號數,高位補0。按位與 如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0。l按位或 兩個相應的二進位制位中只要有乙個為1,該位的結果值為1,...

C語言中 的實際用途

作為乙個開發人員,在看別人專案或者看第三方庫的源 時,可能經常會看到譬如a 4 0x0f這樣的寫法,對於一些初入行的童鞋來說可能就不是太明白這是什麼意思。下面我們就來講解這幾個運算子的實際用途。運算子含義 描述 左移用來將乙個數的各二進位制位全部左移n位,高位捨棄,低位補0。右移將乙個數的各二進位制...

C語言中的遞迴

遞迴就是乙個函式在它的函式體內呼叫它自身。執行遞迴函式將反覆呼叫其自身,每呼叫一次就進入新的一層。直到某一條件跳出!例1 計算5的階乘 例2 include 定義獲取單詞數量的函式 int getwordnumber int n else int main 例3 猴子第一天摘下n個桃子,當時就吃了一...