简体中文

在 B 站上偶然看到了这个系列 “从 0 开始的 C++ 算法课” ,感觉很适合入门,于是就跟着视频学习记录了一下。

原系列视频作者链接【从 0 开始的 C++算法课】第 00 期 | 环境搭建 & 递归 (一) | 基本数列递归

需求:使用递归方式求解等差数列 1 4 7 10 13 … 第 n 项的值,要求输入 n 输出第 n 项的值

首先定义函数 f ,输入的参数为整数 n ,对于这个等差数列返回结果依然为整数,所以返回结果为整数 res

然后我们调用这个函数本身求出 res 的值,若输入的参数为 6 则函数计算流程如下

可以看到整个过程是依次往前计算,但是我们知道数列没有第 0 项,因此递归函数不能没有限制

递归需要有起始项,避免无限制递归,因此需要手动设置 n = 1 时的 res 值

if (n == 1){
                res = 1;
}
else{
                res = f(n-1)+3;
}

记得提前定义 res

完整代码如下

#include <stdio.h>

int f(int n)
{
    int res;
    if (n == 1)
    {
        res = 1;
    }
    else
    {
        res = f(n - 1) + 3;
    }
    return res;
}

int main()
{
    int n;
    printf("Please enter a value for 'n': ");
    scanf("%d", &n);
    printf("The value of the %d item is: %d", n, f(n));
    return 0;
}

作业

题 1

#include <stdio.h>

int f(int n)
{
    int res;
    if (n == 1)
    {
        res = 2;
    }
    else
    {
        res = f(n - 1) * 2;
    }
    return res;
}

int main()
{
    int n;
    printf("Please enter a value for 'n': ");
    scanf("%d", &n);
    printf("The value of the %d item is: %d", n, f(n));
    return 0;
}

题 2

#include <stdio.h>

int f(int n)
{
    int res;
    if (n == 0 || n == 1)
    {
        res = 1;
    }
    else
    {
        res = f(n - 1) * n;
        }
    return res;
}

int main()
{
    int n;
    printf("Please enter a value for 'n': ");
    scanf("%d", &n);
    printf("The factorial of %d is: %d", n, f(n));
    return 0;
}
0
0
0
0