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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

递归、尾递归、迭代算法【在 斐波拉契数列】上的实现

發布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 递归、尾递归、迭代算法【在 斐波拉契数列】上的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/*
??? 遞歸: 【逆序】從未知點推到已知點,【順序】代入已知點結果,從已知點帶入并計算到未知點,最終到終點
??? 尾遞歸: 從起點開始,依順序計算結果,并無限靠近最終目標點
??? 迭代: 從起點開始,依順序計算結果,并無限靠近最終目標點
?? ?
??? 以如上的三種方式,實現斐波拉契數列 計算
??? 斐波拉契數列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,
?????????? { 0,? n=0
??? f(n) = { 1,? n=1 n=2
?????????? { f(n-1) + f(n-2)
*/


#include <stdio.h>

/* 遞歸 */
unsigned int recursion(unsigned int sn)
{
??? if (0 == sn)
??? {
??????? return 0;
??? }
??? else if (?? 3 > sn
???????????? && sn > 0)
??? {
??????? return 1;
??? }
??? else
??? {
??????? return recursion(sn-1) + recursion(sn-2);
??? }

??? printf("recursion:not expect reach!\n");
??? return 0;
}

/* 尾遞歸 */
unsigned int trailRecursion(unsigned int first, unsigned int second, unsigned sn);
unsigned int trailRecursion(unsigned int first, unsigned int second, unsigned sn)
{
??? if (0 == sn)
??? {
??????? return 0;
??? }
??? if (1 == sn)
??? {
??????? return first;
??? }
??? else if (2 == sn)
??? {
??????? return second;
??? }
??? else if (3 == sn)
??? {
??????? return first + second;
??? }
??? else
??? {
??????? return trailRecursion(second, first+second, sn-1);
??? }
}
/* 迭代 */
unsigned int iteration(unsigned int sn)
{
??? unsigned int first = 1;
??? unsigned int second = 1;
??? unsigned int curr = 0;

??? if (0 == sn)
??? {
??????? return 0;
??? }
??? else if (1 == sn)
??? {
??????? return first;
??? }
??? else if (2 == sn)
??? {
??????? return second;
??? }
?? ?
??? while(sn-- > 2)
??? {
??????? curr = first + second;
??????? first = second;
??????? second = curr;
??? }
?? ?
??? return curr;
}
/* 測試程序 */
int main(void)
{
??? unsigned int value = 0;
??? unsigned int sn = 10;

??? value = recursion(sn);
??? printf("fibonacciSequency-recursion-%u: %u\n", sn, value);

??? value = trailRecursion(1, 1, 10);
??? printf("fibonacciSequency-trailRecursion-%u: %u\n", sn, value);

??? value = iteration(10);
??? printf("fibonacciSequency-iteration-%u: %u\n", sn, value);

??? return 0;
}

轉載于:https://www.cnblogs.com/tedani/p/10004512.html

總結

以上是生活随笔為你收集整理的递归、尾递归、迭代算法【在 斐波拉契数列】上的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。