博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

递归理解(通过阶乘和斐波那契数列理解递归)C语言版

Posted on 2025-02-07 11:10  steve.z  阅读(53)  评论(0)    收藏  举报

//
//  main.c
//  01递归理解:通过求阶乘(factorial)和斐波那契数列(fibonacci sequence)理解递归
//
//  Created by steve xiaohu zhao on 2025/2/7.
//

#include <stdio.h>

// 1. 求阶乘
int factorial(int n) {
    if (n == 0)
        return 1;
    return n * factorial(n - 1);
}
/*
 理解:
 factorial(5) = 5 * factorial(4)
 factorial(4) = 4 * factorial(3)
 factorial(3) = 3 * factorial(2)
 factorial(2) = 2 * factorial(1)
 factorial(1) = 1 * factorial(0)
 factorial(0) = 1
 依次反向带入即可计算出最终结果
 */

// 2. 求斐波那契数列:计算第 n 个fibonacci 数列的数字是多少?
int fibonacci(int n) {
    if (n == 1 || n == 2) {
        return 1;
    }
    return fibonacci(n - 2) + fibonacci(n - 1);
}

/*
 理解:
 fibonacci(6) = fibonacci(5) + fibonacci(4)
 fibonacci(5) = fibonacci(4) + fibonacci(3)
 fibonacci(4) = fibonacci(3) + fibonacci(2)
 fibonacci(3) = fibonacci(2) + fibonacci(1)
 fibonacci(2) = 1
 fibonacci(1) = 1
 */

int main(int argc, const char *argv[]) {
    //    // 1. 计算阶乘
    //    for (int i = 0; i < 10; i++) {
    //        printf("%d 的阶乘是:%d\n", i, factorial(i));
    //    }

    // 2.求斐波那契数列
    for (int i = 1; i < 30; i++) {
        printf("%d ", fibonacci(i));
    }
    printf("\n");
    return 0;
}