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

C語言遞歸操作用法總結(jié)

 更新時(shí)間:2016年02月14日 11:37:47   作者:思齊_  
這篇文章主要介紹了C語言遞歸操作用法,結(jié)合實(shí)例形式總結(jié)分析了C語言遞歸操作的原理、實(shí)現(xiàn)技巧與相關(guān)應(yīng)用,需要的朋友可以參考下

本文實(shí)例總結(jié)了C語言遞歸操作用法。分享給大家供大家參考,具體如下:

用歸納法來理解遞歸

步進(jìn)表達(dá)式:?jiǎn)栴}蛻變成子問題的表達(dá)式
結(jié)束條件:什么時(shí)候可以不再是用步進(jìn)表達(dá)式
直接求解表達(dá)式:在結(jié)束條件下能夠直接計(jì)算返回值的表達(dá)式
邏輯歸納項(xiàng):適用于一切非適用于結(jié)束條件的子問題的處理,當(dāng)然上面的步進(jìn)表達(dá)式其實(shí)就是包含在這里面了。

遞歸算法的一般形式:

void func( mode)
{
 if(endCondition)
 {
  constExpression   //基本項(xiàng)
 }
 else
 {
  accumrateExpreesion  //歸納項(xiàng)
  mode=expression   //步進(jìn)表達(dá)式
   func(mode)   //調(diào)用本身,遞歸
 }
}

最典型的就是N!算法,這個(gè)最具有說服力。理解了遞歸的思想以及使用場(chǎng)景,基本就能自己設(shè)計(jì)了,當(dāng)然要想和其他算法結(jié)合起來使用,還需要不斷實(shí)踐與總結(jié)了。

#include "stdio.h"
#include "math.h"
int main(void)
{
 int n, rs;
 printf("請(qǐng)輸入需要計(jì)算階乘的數(shù)n:");
 scanf("%d",&n);
 rs = factorial(n);
 printf("%d ", rs);
}
// 遞歸計(jì)算過程
int factorial(n){
  if(n == 1) {
   return 1;
  }
  return n * factorial(n-1);
}

遞歸的基本思想是把規(guī)模大的問題轉(zhuǎn)化為規(guī)模小的相似的子問題來解決。在函數(shù)實(shí)現(xiàn)時(shí),因?yàn)榻鉀Q大問題的方法和解決小問題的方法往往是同一個(gè)方法,所以就產(chǎn)生了函數(shù)調(diào)用它自身的情況。另外這個(gè)解決問題的函數(shù)必須有明顯的結(jié)束條件,這樣就不會(huì)產(chǎn)生無限遞歸的情況了。

能用遞歸來解決的問題必須滿足兩個(gè)條件:

可以通過遞歸調(diào)用來縮小問題規(guī)模,且新問題與原問題有著相同的形式。
存在一種簡(jiǎn)單情境,可以使遞歸在簡(jiǎn)單情境下退出。

如果一個(gè)問題不滿足以上兩個(gè)條件,那么它就不能用遞歸來解決。

為了方便理解,還是拿斐波那契數(shù)列來說下:求斐波那契數(shù)列的第N項(xiàng)的值。

這是一個(gè)經(jīng)典的問題,說到遞歸一定要提到這個(gè)問題。斐波那契數(shù)列這樣定義:f(0) = 0, f(1) = 1, 對(duì)n > 1, f(n) = f(n-1) + f(n-2)

這是一個(gè)明顯的可以用遞歸解決的問題。讓我們來看看它是如何滿足遞歸的兩個(gè)條件的:

1.對(duì)于一個(gè)n>2, 求f(n)只需求出f(n-1)和f(n-2),也就是說規(guī)模為n的問題,轉(zhuǎn)化成了規(guī)模更小的問題;

2. 對(duì)于n=0和n=1,存在著簡(jiǎn)單情境:f(0) = 0, f(1) = 1。

因此,我們可以很容易的寫出計(jì)算費(fèi)波納契數(shù)列的第n項(xiàng)的遞歸程序:

int fib(n){
 if(n == 0)
  return 0;
 else if(n == 1)
  return 1;
 else
  return f(n-1) + f(n-2);
}

在編寫遞歸調(diào)用的函數(shù)的時(shí)候,一定要把對(duì)簡(jiǎn)單情境的判斷寫在最前面,以保證函數(shù)調(diào)用在檢查到簡(jiǎn)單情境的時(shí)候能夠及時(shí)地中止遞歸,否則,你的函數(shù)可能會(huì)永不停息的在那里遞歸調(diào)用了。

判斷一個(gè)字符串是否是回文:

function huiwen($str)
{
 if(strlen($str)==1 || strlen($str)==0){
  return 1;
 }else{
  if($str[0]==$str[strlen($str)-1]){
   $str = substr($str,1,-1);;
   echo $str."<br/>";
   return huiwen($str);
  }else{
   return 0;
  }
 }
}

希望本文所述對(duì)大家C語言程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Visual Studio 2019配置OpenCV4.1.1詳細(xì)圖解教程

    Visual Studio 2019配置OpenCV4.1.1詳細(xì)圖解教程

    這篇文章主要介紹了Visual Studio 2019配置OpenCV4.1.1詳細(xì)圖解教程 ,需要的朋友可以參考下
    2020-02-02
  • 深入了解C++11中promise和future的使用

    深入了解C++11中promise和future的使用

    C++11中promise和future機(jī)制是用于并發(fā)編程的一種解決方案,用于在不同線程完成數(shù)據(jù)傳遞(異步操作)。Promise和Future提供了訪問異步操作結(jié)果的機(jī)制,可以在線程之間傳遞數(shù)據(jù)和異常消息。本文就來聊聊二者的使用,希望對(duì)大家有所幫助
    2022-11-11
  • C/C++中多態(tài)性詳解及其作用介紹

    C/C++中多態(tài)性詳解及其作用介紹

    這篇文章主要介紹了C/C++中多態(tài)性(polymorphism)詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • VS2010+Opencv+MFC讀取圖像和視頻顯示在Picture控件

    VS2010+Opencv+MFC讀取圖像和視頻顯示在Picture控件

    這篇文章主要為大家詳細(xì)介紹了VS2010+Opencv+MFC讀取圖像和視頻顯示在Picture控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • C++函數(shù)指針的用法詳解

    C++函數(shù)指針的用法詳解

    這篇文章主要為大家介紹了C++函數(shù)指針的用法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

    2022-01-01
  • 圖解AVL樹數(shù)據(jù)結(jié)構(gòu)輸入與輸出及實(shí)現(xiàn)示例

    圖解AVL樹數(shù)據(jù)結(jié)構(gòu)輸入與輸出及實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了C++圖解AVL樹數(shù)據(jù)結(jié)構(gòu)輸入與輸出操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C++?pthread入門指南

    C++?pthread入門指南

    pthread是C++98接口且只支持Linux,使用時(shí)需要包含頭文件#include?<pthread.h>,編譯時(shí)需要鏈接pthread庫,其中p是POSIX的縮寫,而POSIX是Portable?Operating?System?Interface的縮寫,這篇文章主要介紹了C++?pthread簡(jiǎn)介,需要的朋友可以參考下
    2024-05-05
  • C語言預(yù)處理預(yù)編譯命令及宏定義詳解

    C語言預(yù)處理預(yù)編譯命令及宏定義詳解

    這篇文章主要為大家介紹了C語言預(yù)處理預(yù)編譯命令及宏定義的詳解,其中包含運(yùn)行環(huán)境命名約定條件及#under等基礎(chǔ)詳解,有需要的朋友可以借鑒參考下
    2021-10-10
  • c++實(shí)現(xiàn)二路歸并排序的示例代碼

    c++實(shí)現(xiàn)二路歸并排序的示例代碼

    這篇文章主要介紹了c++實(shí)現(xiàn)二路歸并排序的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • C++常見異常處理原理及代碼示例解析

    C++常見異常處理原理及代碼示例解析

    這篇文章主要介紹了C++常見異常處理原理及代碼示例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評(píng)論

河源市| 太白县| 洪雅县| 扶沟县| 杭锦后旗| 南涧| 汕头市| 东港市| 宁津县| 广平县| 汤原县| 怀宁县| 兴安县| 日喀则市| 东阳市| 枣庄市| 江华| 高邑县| 双鸭山市| 宿州市| 宁波市| 名山县| 永平县| 榆中县| 申扎县| 普安县| 全州县| 海安县| 额尔古纳市| 多伦县| 唐海县| 洛扎县| 漯河市| 如东县| 盐池县| 凤山县| 汝阳县| 铁岭市| 广西| 营山县| 丘北县|