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;
}

 

转载于:https://www.cnblogs.com/yongdaimi/p/6370924.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值