欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言中遞歸的實(shí)際應(yīng)用與經(jīng)典問題

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

一、什么是遞歸

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

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

遞歸的兩個(gè)必要條件:

存在限制條件,當(dāng)滿足這個(gè)限制條件的時(shí)候,遞歸便不再繼續(xù)。

每次遞歸調(diào)用之后越來越接近這個(gè)限制條件。

二、遞歸模板

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

三、遞歸的實(shí)際應(yīng)用

1.階乘遞歸

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

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

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

遞歸算法:

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;
}

四、遞歸的經(jīng)典問題

漢諾塔問題

漢諾塔問題來源:

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

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

首先我們?cè)O(shè)計(jì)一個(gè)盤,那就直接把這個(gè)盤從自身柱子移到目標(biāo)柱。

其次我們看兩個(gè)盤,三根柱子兩個(gè)盤,先將上面的柱子移動(dòng)到中間柱,然后將最下面的柱子移動(dòng)到目標(biāo)柱,最后中間的柱子。

再來看多個(gè)盤

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);//遞歸處理,一開始的時(shí)候,先將n-1個(gè)盤子移至過渡柱z上后再將最底下的大盤子直接移至目標(biāo)柱子y
		printf("%c->&c\n", a, c);
		hanno(n - 1, b, a, c);//然后重復(fù)以上步驟,遞歸處理放在過渡柱z上的n-1個(gè)盤子,
	}
}

青蛙跳臺(tái)階

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

解題思路

我們?cè)O(shè)臺(tái)階數(shù)位N;

當(dāng)N=1時(shí),當(dāng)然只有1種跳法;

當(dāng)N=2時(shí),青蛙可以跳2次1層和跳1次2層;

當(dāng)N=3時(shí),當(dāng)有3層臺(tái)階時(shí),青蛙可以選擇先跳1層,剩下2層臺(tái)階,所以此時(shí)就是有2層臺(tái)階時(shí)的跳法,有2種;當(dāng)青蛙選擇第一次跳2層臺(tái)階時(shí),剩下1層臺(tái)階,此時(shí)有1層臺(tái)階時(shí)的跳法,所以3層臺(tái)階時(shí)的方法是:2層臺(tái)階的方法 + 1層臺(tái)階的方法。

#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;
}

總結(jié)

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

相關(guān)文章

  • C++ 多態(tài)性虛函數(shù)和動(dòng)態(tài)綁定學(xué)習(xí)筆記

    C++ 多態(tài)性虛函數(shù)和動(dòng)態(tài)綁定學(xué)習(xí)筆記

    這篇文章主要為大家介紹了C++ 多態(tài)性虛函數(shù)和動(dòng)態(tài)綁定學(xué)習(xí)筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 通過stringstream實(shí)現(xiàn)常用的類型轉(zhuǎn)換實(shí)例代碼

    通過stringstream實(shí)現(xiàn)常用的類型轉(zhuǎn)換實(shí)例代碼

    在本篇文章里小編給大家分享了關(guān)于通過stringstream實(shí)現(xiàn)常用的類型轉(zhuǎn)換實(shí)例代碼內(nèi)容,需要的朋友們可以參考下。
    2020-04-04
  • Qt利用QDrag實(shí)現(xiàn)拖拽拼圖功能詳解

    Qt利用QDrag實(shí)現(xiàn)拖拽拼圖功能詳解

    QDrag類為MIME-based拖拽數(shù)據(jù)轉(zhuǎn)換提供支持。本文為大家主要介紹如何利用QDrag類實(shí)現(xiàn)拖拽拼圖功能。左邊是打散的圖,拖動(dòng)到右邊進(jìn)行復(fù)現(xiàn),此外程序還支持手動(dòng)拖入原圖片,感興趣的可以了解一下
    2022-07-07
  • C語言超全面講解函數(shù)的使用方法上

    C語言超全面講解函數(shù)的使用方法上

    函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語句。每個(gè)?C?程序都至少有一個(gè)函數(shù),即主函數(shù)?main()?,所有簡單的程序都可以定義其他額外的函數(shù),由于篇幅過大,分為兩篇講解,下面開始上篇
    2022-04-04
  • C++ 中友元函數(shù)與友元類詳解

    C++ 中友元函數(shù)與友元類詳解

    這篇文章主要介紹了C++ 中友元函數(shù)與友元類詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++類與對(duì)象之運(yùn)算符重載詳解

    C++類與對(duì)象之運(yùn)算符重載詳解

    運(yùn)算符重載的方法是定義一個(gè)重載運(yùn)算符的函數(shù),在需要執(zhí)行被重載的運(yùn)算符時(shí),系統(tǒng)就自動(dòng)調(diào)用該函數(shù),以實(shí)現(xiàn)相應(yīng)的運(yùn)算。也就是說,運(yùn)算符重載是通過定義函數(shù)實(shí)現(xiàn)的
    2021-10-10
  • c++中c_str()的用法示例

    c++中c_str()的用法示例

    這篇文章主要介紹了c++中c_str()的用法示例,幫助大家更好的理解和學(xué)習(xí)C++,感興趣的朋友可以了解下
    2020-09-09
  • C語言項(xiàng)目爬樓梯的兩種實(shí)現(xiàn)方法參考

    C語言項(xiàng)目爬樓梯的兩種實(shí)現(xiàn)方法參考

    今天小編就為大家分享一篇關(guān)于C語言項(xiàng)目爬樓梯的兩種實(shí)現(xiàn)方法參考,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • c語言求兩個(gè)字符串的交集

    c語言求兩個(gè)字符串的交集

    大家好,本篇文章主要講的是c語言求兩個(gè)字符串的交集,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 利用上下文屬性將?C++?對(duì)象嵌入?QML?里

    利用上下文屬性將?C++?對(duì)象嵌入?QML?里

    這篇文章主要介紹了利用上下文屬性將?C++?對(duì)象嵌入?QML里,將?QML?對(duì)象加載到?C++?應(yīng)用程序中時(shí),直接嵌入一些可在?QML?代碼中使用的?C++?數(shù)據(jù)會(huì)很有用。例如,這使得在嵌入對(duì)象上調(diào)用?C++?方法或使用?C++?對(duì)象實(shí)例作為?QML?視圖的數(shù)據(jù)模型成為可能,下面一起來學(xué)習(xí)該內(nèi)容吧
    2021-12-12

最新評(píng)論