递归、尾递归、迭代算法【在 斐波拉契数列】上的实现
/*
??? 遞歸: 【逆序】從未知點推到已知點,【順序】代入已知點結果,從已知點帶入并計算到未知點,最終到終點
??? 尾遞歸: 從起點開始,依順序計算結果,并無限靠近最終目標點
??? 迭代: 從起點開始,依順序計算結果,并無限靠近最終目標點
?? ?
??? 以如上的三種方式,實現斐波拉契數列 計算
??? 斐波拉契數列: 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
總結
以上是生活随笔為你收集整理的递归、尾递归、迭代算法【在 斐波拉契数列】上的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10.贝叶斯理论
- 下一篇: 正则表达式匹配手机4位尾号