日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一些基本算法的递归实现

發(fā)布時(shí)間:2025/6/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一些基本算法的递归实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問題描述:

遞歸是計(jì)算機(jī)科學(xué)中最偉大的思想。按照我的理解,所謂遞歸就是把問題化約為比自身維度更小的問題,直至邊界點(diǎn)(base condition),

然后利用邊界點(diǎn)的解的結(jié)果(相對(duì)容易得到)和一定規(guī)則回退得到最終所需要的結(jié)果。

? ? ? ? 常用到的遞歸思想的可歸類為:

1. 各種tree construct 的操作:遍歷(inorder, preorder, postorder),深度優(yōu)先搜索(dfs),廣度優(yōu)先搜索(bfs),插入,刪除,返回最值等;

? ? ? ? 2. 各種搜索問題最終都能化約為遞歸問題。比如八皇后,排列,組合,背包等等;

3. 下面我嘗試用遞歸思想實(shí)現(xiàn)一些平時(shí)最常用的操作(比如加法,乘法等):


代碼如下:

[cpp]?view plaincopy
  • int?max(?int?a,?int??b?)??
  • {??
  • ????if(?a??>?b?)??
  • ????????return?a;??
  • ??????
  • ????return?b;??
  • }??
  • ??
  • int?min(?int?a,?int?b?)??
  • {??
  • ????if(?a?<?b?)??
  • ????????return?a;??
  • ??????
  • ????return?b;??
  • }??
  • ??
  • int?Add(?int?m,?int?n?)??
  • {??
  • ????if(?0?==?n?)??
  • ????????return?0;??
  • ??????
  • ????return?Add(?m?+?1,?n?-?1);??
  • }??
  • ??
  • int?Mutiple(?int?m,?int?n?)??
  • {??
  • ????if(?1?==?n?)??
  • ????{??
  • ????????return?m;??
  • ????}??
  • ??????
  • ????return?Mutiple(?m?+?m,?n?-?1?)??
  • }??
  • ??
  • int?Subtract(?int?m,?int?n?)??
  • {??
  • ????if(?0?==?n?)??
  • ????{??
  • ????????return?0;??
  • ????}??
  • ??????
  • ????return?Subtract(?m?-?1,?n?-?1?);??
  • }??
  • ??
  • int?findMax(?int*?items,?int?idx,?int?size?)??
  • {??
  • ????if(?idx?==?size?-?1)??
  • ????????return?items[idx];??
  • ??????
  • ????return?max(??findMax(?items,?idx?+?1,?size?),?items[idx]?);??
  • }??
  • ??
  • int?findMin(?int*?items,?int?idx,?int?size?)??
  • {??
  • ????if(?idx?==?size?-?1?)??
  • ????????return?items[idx];??
  • ??????
  • ????return?min(?findMin(?items,?idx?+?1,?size?),?items[idx]?);??
  • }??
  • ??
  • int?Search(?int*?items,?int?idx,?int?size,?int?val?)??
  • {??
  • ????if(?idx?>=?size?)??
  • ????????return?-1;??
  • ??????
  • ????if(?items[idx]?==?val?)??
  • ????????return?idx;??
  • ??????
  • ????return?Search(?items,?idx?+?1,?size,?val?);??
  • }??
  • ??
  • int?BinarySearch(?int*?items,?int?begin,?int?end,?int?val?)??
  • {??
  • ????if(?begin?>?end?)??
  • ????????return?-1;??
  • ??????
  • ????int?mid?=?begin?+?(?(?end?-?begin?)?>>?1?);??
  • ????if(?items[mid]?>?val?)??
  • ????{??
  • ????????return?BinarySearch(?items,?begin,?mid?-?1,?val?);??
  • ????}??
  • ????else?if(?items[mi]?<?val?)??
  • ????{??
  • ????????return?BinarySearch(?items,?mid?+?1,?end,?val?);??
  • ????}??
  • ????else??
  • ????{??
  • ????????return?mid;??
  • ????}??
  • }??
  • ??
  • int?gcd(?int?n,?int?m?)??
  • {??
  • ????if(?0?==?m?)??
  • ????????return?n;??
  • ??????
  • ????return?gcd(?m,?n?%?m?);??
  • }??
  • ??
  • int?fibonical(?int?n?)??
  • {??
  • ????if(?1??==?n?)??
  • ????????return?1;??
  • ??????
  • ????return?fibonical(?n?-?1?)?+?fibonical(?n?-?2?);??
  • }??
  • ??
  • int?fictional(?int?n?)??
  • {??
  • ????if(?1?==?n?)??
  • ????????return?n;??
  • ??????
  • ????return?n?*?fictional(?n?-?1?);??
  • }??
  • ??
  • unsigned?int?power(?int?n,?int?m?)??
  • {??
  • ????if(?1?==?m?)??
  • ????????return?n;??
  • ??????
  • ????return?power(?n?*?m,?m?-?1?);??
  • }??
  • ??
  • ??
  • unsigned?int?powerQuick(?int?n,?int?m?)??
  • {??
  • ????if(?1?==?m?)??
  • ????????return?n;??
  • ??????
  • ????unsigned?int?k?=?powerQuick(?n,?m?/?2?);??
  • ??????
  • ????if(?0?==?m?%?2?)??
  • ????{??
  • ????????return?k?*?k;??
  • ????}??
  • ????else??
  • ????{??
  • ????????return?k?*?k?*?powerQuick(?n,?1?);??
  • ????}??
  • ??????
  • }??
  • ??
  • ??
  • ??
  • unsigned?int?Fib(?int?n,?unsigned?int?a,?unsigned?int?b?)??
  • {??
  • ????if(?1?==?n?)??
  • ????????return?b;??
  • ??????
  • ????return?Fib(?n?-?1,?b,?a?+?b?);??
  • }??
  • ??
  • ??
  • void?EulerLetter(?int?n,?int?depth,?int*?result?)??
  • {??
  • ????if(?depth?==?n?)??
  • ????{??
  • ????????for(?int?i?=?0;?i?<?dpeth;?i++?)??
  • ????????{??
  • ????????????printf(?"%d?",?result[i]?);??
  • ????????}??
  • ??????????
  • ????????printf(?"\n"?);??
  • ??????
  • ????????return;??
  • ????}??
  • ??????
  • ??????
  • ????for(?int?i?=?0;?i?<?n;?i++?)??
  • ????{??
  • ????????if(?depth?!=?i?)??
  • ????????{??
  • ????????????result[depth]?=?i;??
  • ????????????EulerLetter(?n,?depth?+?1,?result?);??
  • ????????}??
  • ????}??
  • } ?
  • 總結(jié)

    以上是生活随笔為你收集整理的一些基本算法的递归实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。