C语言函数递归(自用笔记)

 1. 何为递归

        递归是函数自己调用自己。

如:

        这是递归的基本形式,不过是死递归,导致栈溢出。

1.1 递归思想:

递归,递指递推,归指回归。

把一个大型复杂问题逐层转化为与原问题相似但规模较小的子问题,直至子问题不能被拆分,递归才算结束,是一个将大事化小的过程。

1.2 递归限制条件:

1)递归存在限制条件,当满⾜这个限制条件的时候,递归便不再继续。

2)每次递归调⽤之后越来越接近这个限制条件。

2. 递归例子

每次函数调用都会向栈区申请一块空间(称作运行时堆栈或者函数栈帧),用于存放调用函数过程中的相关信息。

例1:求n的阶乘!

分析:

1!=1

2!=2*1=2*1!

3!=3*2*1=3*2!

...

n!=n(n-1)!

\displaystyle count(n)=\left\{\begin{matrix} 1& ,n=0 \\ n*count(n-1)&,n>0 \end{matrix}\right.

实现:

#include<stdio.h>

int count(int n)
{
    if(n==0)
        return 1;
    else
        return n*count(n-1);

}

int main()
{
    int n=0;
    scanf("%d",&n);
    int s=count(n);
    printf("%d\n",s);
    return 0;
}

 

n>0时,求n的阶乘转化成n乘(n-1)的阶乘,以此类推,直到n=0时结束。

例2:输入一个整数,按照顺序打印每一位数。

输入1234    打印 1 2 3 4

分析:

1234%10      \rightarrow        4

1234/10=123

123%10        \rightarrow        3

1233/10=12

12%10          \rightarrow        2

12/10=1

1%10            \rightarrow        1

 

实现:

#include<stdio.h> 

void print(int n)
{
    if (n > 9 )
        print(n/10);
    printf("%d ", n % 10);

}

int main()
{
    int n = 0;
    scanf("%d", &n);
    print(n);
    return 0;
}

例3:求第n给斐波那契数。

分析:

1 1 2 3 5 8 13 ······

Fib(n)\left\{\begin{matrix} 1&,n\leqslant 2 \\ Fib(n-1)+Fib(n-2)& ,n> 2 \end{matrix}\right.

#include<stdio.h>

int Fib(int n)
{
    if (n > 2)
        return Fib(n-1)+Fib(n-2);
    else
        return 1;

}

int main()
{
    int n = 0;
    scanf("%d", &n);
    int r=Fib(n);
    printf("%d ", r);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值