最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年09月01日 11:28:59   作者:flyyyya  
函數(shù)以及函數(shù)的遞歸調用是學習C語言必須要掌握的內容,且遞歸作為經典的算法思想被廣泛應用于程序設計中,下面這篇文章主要給大家介紹了關于C語言中遞歸的實際應用與經典問題的相關資料,需要的朋友可以參考下

一、什么是遞歸

遞歸簡單的來說就是在函數(shù)中調用自己

它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算,大大地減少了程序的代碼量。

遞歸的兩個必要條件:

存在限制條件,當滿足這個限制條件的時候,遞歸便不再繼續(xù)。

每次遞歸調用之后越來越接近這個限制條件。

二、遞歸模板

void recursion(參數(shù)0) 
{
    if (終止條件)
    {
        return;
    }
    else
    {
        recursion(參數(shù)1)
    }
}

三、遞歸的實際應用

1.階乘遞歸

int tmp(int n)
{
	if (n == 1)
	{
		return 1;
	}
	else
	{
		return n*tmp(n - 1);
	}
}

2.斐波那契數(shù)列

斐波那契數(shù)列指的是這個數(shù)列從第3項開始,每一項都等于前兩項之和。

遞歸算法:

int fibonacci(int n)
{
	if (n<=2)
		return 1;
	else
	{
		return fibonacci(n - 1) + fibonacci(n - 2);
	}
}

非遞歸方法:

int fibonacci(int n)
{
	int a = 1;
	int b = 1;
	int c = 1;
	while (n > 2)
	{
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}

四、遞歸的經典問題

漢諾塔問題

漢諾塔問題來源:

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

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

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

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

再來看多個盤

void hanno(int n, char a, char b, char c)
{
	if (n == 1)
	{
		printf("%c->%c\n", a, c);
	}
	else
	{
		hanno(n - 1, a, c, b);//遞歸處理,一開始的時候,先將n-1個盤子移至過渡柱z上后再將最底下的大盤子直接移至目標柱子y
		printf("%c->&c\n", a, c);
		hanno(n - 1, b, a, c);//然后重復以上步驟,遞歸處理放在過渡柱z上的n-1個盤子,
	}
}

青蛙跳臺階

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

解題思路

我們設臺階數(shù)位N;

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

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

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

#include<stdio.h>
int frog(int n)
{
   if(n == 1)
   {
      return 1;
   }
   if(n == 2)
   {
      return 2;
   }
   return frog(n-1) + frog(n-2);
}
int main()
{
   int n;
   scanf("%d",&n);
   int ways = frog(n);
   printf("%d\n",ways);
   return 0;
}

總結

到此這篇關于C語言中遞歸的實際應用與經典問題的文章就介紹到這了,更多相關C語言中遞歸應用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于C語言實現(xiàn)靜態(tài)通訊錄的示例代碼

    基于C語言實現(xiàn)靜態(tài)通訊錄的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C語言實現(xiàn)一個簡單的靜態(tài)通訊錄,文中的示例代碼講解詳細,對我們學習C語言有一定幫助,需要的可以參考一下
    2022-07-07
  • VSCode遠程代碼開發(fā)及DNS隧道端口轉發(fā)實現(xiàn)遠程辦公代碼

    VSCode遠程代碼開發(fā)及DNS隧道端口轉發(fā)實現(xiàn)遠程辦公代碼

    這篇文章主要介紹了VSCode遠程代碼開發(fā)及DNS隧道端口轉發(fā)實現(xiàn)遠程辦公,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • C語言實現(xiàn)學籍管理系統(tǒng)課程設計

    C語言實現(xiàn)學籍管理系統(tǒng)課程設計

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學籍管理系統(tǒng)課程設計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • C語言程序環(huán)境中的預處理詳解

    C語言程序環(huán)境中的預處理詳解

    這篇文章主要為大家詳細介紹了C語言程序環(huán)境中的預處理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++實現(xiàn)簡單學生成績管理系統(tǒng)

    C++實現(xiàn)簡單學生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)簡單學生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言進階棧幀示例詳解教程

    C語言進階棧幀示例詳解教程

    這篇文章主要為大家介紹了C語言進階棧幀的示例詳解教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-02-02
  • C++ float轉std::string 小數(shù)位數(shù)控制問題

    C++ float轉std::string 小數(shù)位數(shù)控制問題

    這篇文章主要介紹了C++ float轉std::string 小數(shù)位數(shù)控制問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • QT中大部分部件如何使用舉例詳解

    QT中大部分部件如何使用舉例詳解

    QWidget類是所有用戶界面對象的基類,被稱為基礎窗口部件,下面這篇文章主要給大家介紹了關于QT中大部分部件如何使用的相關資料,需要的朋友可以參考下
    2022-06-06
  • C++特殊成員函數(shù)以及其生成機制詳解

    C++特殊成員函數(shù)以及其生成機制詳解

    這篇文章主要給大家介紹了關于C++特殊成員函數(shù)以及其生成機制的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • C++實現(xiàn)簡單走迷宮的代碼

    C++實現(xiàn)簡單走迷宮的代碼

    這篇文章主要為大家詳細介紹了C++實現(xiàn)簡單走迷宮的代碼,利用回溯法求解,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評論

越西县| 普格县| 武乡县| 中卫市| 北京市| 京山县| 固阳县| 化德县| 南涧| 七台河市| 从江县| 三原县| 绿春县| 洛扎县| 德江县| 新丰县| 台南县| 开江县| 夏津县| 格尔木市| 宜丰县| 石嘴山市| 宾阳县| 全椒县| 客服| 休宁县| 视频| 汝城县| 高台县| 思茅市| 五大连池市| 梧州市| 德昌县| 凤庆县| 常德市| 长顺县| 闻喜县| 贺兰县| 金塔县| 阿坝县| 黔西|