C语言基础(14)-递归

一. 递归的定义

函数可以调用自己,这就叫函数的递归。

先序递归和后序递归

复制代码
#include <stdio.h>

void test(int n);
void test1(int n);

void main() {
    
    int a = 10;
    test1(a);
    system("pause");
}


void test(int n) {

    if (n > 0){ // 递归终止条件,递归一定要有终止条件
        printf("n=%d\n",n); // 先序递归 输出结果:10 9 8 7 6 5 4 3 2 1
        test1(n-1);
    }
}

void test1(int n) {

    if (n > 0) {
        test1(n-1);
        printf("n=%d\n",n); // 后序递归 输出结果:1 2 3 4 5 6 7 8 9 10
    }

}
复制代码

例1:求第n个人的岁数

n个人排成一队,问第n个人多少岁,他回答比前面一个人大2岁,再问前面一个人多少岁,他回答比前面一个人大2岁,一直问到最后问第一个人,他回答10

复制代码
#include <stdio.h>

int getAge(int n);

void main() {
    
    int a = 8;
    printf("第%d个人的岁数是:%d\n",a,getAge(a));
    system("pause");
}


int getAge(int n) {

    int age;
    if (n == 1) {
        age = 10;
    }
    else{
        age = getAge(n - 1) + 2;
    }
    return age;

}
复制代码

例2:将十进制数转化为二进制数

复制代码
#include <stdio.h>

int getBinary(int n);

void main() {
    
    int a = 5;
    getBinary(a);
    system("pause");
}


//将十进制数转换为二进制数
int getBinary(int n) {

    int i = n % 2;
    if (n >= 2) {
        getBinary(n / 2);
    }
    printf("%d",i);
}
复制代码

例3:斐波那契数列

复制代码
#include <stdio.h>

int fib(int n);

void main() {
    

    for (int i = 0; i < 11; i++) {
        printf("第%d项的值为%d\n", i, fib(i));
    }

    system("pause");
}


// 斐波那契数列
int fib(int n) {

    if (n == 0)
        return 0;
    if (n == 1)
        return 1;
    if (n > 1)
        return fib(n - 1) + fib(n - 2);

}
复制代码

例4:计算一个字符串的长度

复制代码
#include <stdio.h>


int mystrlen(const char *p, int n);

void main() {
    
    char *a = "hello123";
    printf("当前字符串的长度为:%d\n",mystrlen(a,0));

    system("pause");
}


int mystrlen(const char *p, int n) {

    if (p[n]) { // 这里判断是否到达字符串末尾的0
        return mystrlen(p,n+1);
    }else {
        return n;
    }

}
复制代码

例5:求n个自然数的和

// 求n个自然数的和
int mysum(int n) {
    if (n == 0) { // 递归终止条件
        return 0;
    }
    return mysum(n - 1) + n;
}

 



如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
posted @   夜行过客  阅读(517)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示