函数递归

2021/9/5 23:37:17

本文主要是介绍函数递归,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、基本概念:

函数自己调用自己,这个过程就叫函数递归。

要点:

递归函数必须包含能够让递归调用停止的语句,或者是能够使用递归的条件。也就是到达一定条件后,嵌套的结果将不会继续调用本函数。


#include <stdio.h>

void up_and_down(int);

int main()

{

    up_and_down(1);

    getchar();

    return 0;

}

void up_and_down(int n)

{

    printf("Level %d: n 的 location 是 %p\n ", n, &n);

    if (n < 4)

        up_and_down(n + 1);

    printf("LEVEL %d: n 的 location 是 %p\n ", n, &n);//这里不理解……为了安抚深究的心情,先这样认为吧,在结束递归调用后,在看不到的地方它逐级将n的递归效果传回了它的主调函数main,不过,这个功能刚好可以用来求进制

}

二、程序运用:

1、求n的阶乘(n ∈ N*)。

数学公式:n!=

代码实现:

#include <stdio.h>

int F(int n);

 

int main()

{

    int m,n;

    scanf_s("%d", &n);

    m = F(n);

    printf("%d!=%d",n, m);

    return 0;

}

 

int F(int n) {

    //int i=1;

    if (n == 1)

        //i = 1;

        return 1;//没有继续嵌套,也就是上面的if是结束嵌套的条件

    else

        //i=n*F(n-1);

        return n * F(n - 1);//一层一层的递减嵌套F(x)相乘

    //return i;

}

2、Fibonacci数列

斐波那契数列,即每个数都是它的前两个数之和。

递推的方法定义为:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2),( n ≥ 2,n ∈ N*)

假如我要求第7个Fibonacci数:

数学关系:f(n)=

代码实现:

#include <stdio.h>

int F(int n);

 

int main()

{

    int n;

    scanf_s("%d", &n);

    //m = F(n);

    printf("第%d个数=%d",n, F(n));

    return 0;

}

 

int F(int n) {

    if ((n == 1)||(n == 2))

        return 1;

    else

        return F(n-1)+F(n-2);

}

3、打印一个正整数的的二进制数。

(1)常规计算中,我们将整数除2求余,直到所得商小于2后再逆向将所得余数组合得二进制。

(2)在二进制的转换中,奇数的末尾一定是1,偶数的末尾一定是0

#include <stdio.h>

int Binary(int n);

 

int main()

{

    int num;

    scanf_s("%d", &num);

    Binary(num);

    return 0;

}

int Binary(int n) {

    int r;

    r = n % 2;

    if (n >= 2)

        Binary(n / 2);

    printf("%d", r);

    //putchar(r == 0 ? "0" : "1");

    return;

}

4、求一个一维数组内元素的和。

#include <stdio.h>

int F(int a[],int L,int R);

int main()

{

    int a[] = {5,6,9,3,7};

    int b;

    b = F(a, 0, 4);//0到4的五个位置

    printf("%d", b);

    return 0;

}

int F(int a[], int L, int R) {

    if (L == R)

        return a[L];

    else

    {

        return a[L] + F(a, L + 1, R);

    }

}



这篇关于函数递归的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程