精华内容
下载资源
问答
  • c语言 递归

    2011-12-06 10:25:22
    c语言 递归c语言解决排列组合问题!
  • //用递归函数来计算N的阶乘 double factorial(int n) { double result; if(n) { printf("输入错误\n"); } else if(n==1 ||n==0) { result=1; } else { result=factorial(n-1)*n; //n=5 5-1=4 4*5...
  • C语言递归

    2021-06-08 09:57:17
    递归就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,...本文主要介绍一下C语言递归 ,以及相关的示例代码。 原文地址:C语言递归 ...

    递归就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况。本文主要介绍一下C语言递归 ,以及相关的示例代码。
    原文地址:C语言递归

    展开全文
  • 主要介绍了C语言递归操作用法,结合实例形式总结分析了C语言递归操作的原理、实现技巧与相关应用,需要的朋友可以参考下
  • 递归就是一个方法自己调用自己。在编程语言中,如果一个...}C语言支持递归,即一个调用自身的函数。但是在使用递归时,程序员需要小心定义函数的退出条件,否则它将进入无限循环。递归函数对于解决许多数学问题非...

    递归就是一个方法自己调用自己。在编程语言中,如果一个程序允许您在同一个函数中调用一个函数,那么它就被称为函数的递归调用。

    a659bbf735d3e140c0e47515cc5996a5.pngvoid recursion() {

    recursion(); /* 函数调用本身 */

    }

    int main() {

    recursion();

    }

    C语言支持递归,即一个调用自身的函数。但是在使用递归时,程序员需要小心定义函数的退出条件,否则它将进入无限循环。

    递归函数对于解决许多数学问题非常有用,例如计算一个数的阶乘、生成斐波那契级数等。

    数的阶乘

    下面的例子使用递归计算一个给定的数的阶乘函数#include

    unsigned long long int factorial(unsigned int i) {

    if(i <= 1) {

    return 1;

    }

    return i * factorial(i - 1);

    }

    int main() {

    int i = 12;

    printf("Factorial of %d is %d\n", i, factorial(i));

    return 0;

    }

    输出:Factorial of 12 is 479001600

    斐波那契系列

    以下示例使用递归函数为给定数字生成斐波那契(Fibonacci)系列#include int fibonacci(int i) {

    if(i == 0) {

    return 0;

    }

    if(i == 1) {

    return 1;

    }

    return fibonacci(i-1) + fibonacci(i-2);}int main() {

    int i;

    for (i = 0; i < 10; i++) {

    printf("%d\t\n", fibonacci(i));

    }

    return 0;}

    输出:0

    1

    1

    2

    3

    5

    8

    13

    21

    34

    相关C语言视频教程推荐:《C教程》

    本篇文章就是关于c语言递归算法的介绍,希望对需要的朋友有所帮助!

    展开全文
  • C语言递归调戏谷歌地球
  • c语言递归函数的使用方法发布时间:2020-06-11 09:39:53来源:亿速云阅读:157作者:Leah这篇文章给大家分享的是c语言递归函数的使用方法。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。递归...

    c语言递归函数的使用方法

    发布时间:2020-06-11 09:39:53

    来源:亿速云

    阅读:157

    作者:Leah

    这篇文章给大家分享的是c语言递归函数的使用方法。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

    递归就是一个过程或 函数 在其定义或说明中有直接或间接调用自身的一种方法;递归函数就是直接或间接调用自身的函数,也就是自身调用自己的过程。

    1.Fibonacci数

    我们直到Fibonacci数的递推公式为:F(0)=F(1)=1,F(n)=F(n-1)+F(n-2) n>=2;

    这个明显地给出了递归边界n=0或1的时候F(n)的值,和递归逻辑F(n)=F(n-1)+F(n-2),即递推公式.所以这个递归函数不难书写#includeusing namespace std;

    int F(int n)//函数返回一个数对应的Fibonacci数{ if(n0 || n1)//递归边界

    return 1; return F(n-1) + F(n-2);//递归公式}

    int main(){ //测试

    int n; while(cin >> n) cout << F(n) << endl;

    return 0;

    }

    2.阶乘的递归公式:n*F(n-1)

    代码如下:#includeusing namespace std;

    int F(int n){ if(n==0)//递归边界

    return 1;

    return n*F(n-1);//递归公式}

    int main(){ int n; cin >> n; cout << F(n) << endl;

    return 0;

    }

    3.数组求和

    给一个数组a[]:a[0],a[1],…,a[n-1]如何用递归的方式求和?

    仍然是两个问题:递归边界和递归公式.

    递归边界是什么?一时不容易想到,但是我们想到了求和,多个数的求和过程是什么,x,y,z,w手动求和的过程是什么?步骤如下:

    x+y=a,任务变为a,z,w求和

    a+z=b,任务变为b,w求和

    b+w=c得出答案

    思考一下,【得出答案】这一步为什么就可以得出答案呢?(废话?)是因为,一个数不用相加就能得出答案.

    所以,递归的边界就是只有一个数.

    所以,递归边界有了,那么递归公式呢?其实手动计算过程中,隐含了递归公式:

    其中+为求两个数的和,F为求多个数的和的递归函数.代码如下:#includeusing namespace std;

    int F(int a[],int start,int end){ if(start==end)//递归边界

    return a[start];

    return a[start] + F(a,start+1,end);//递归公式}

    int main(){ int a[] = {1,2,3,4,5}; int s=0,e=4; cout << F(a,s,e) << endl;

    return 0;

    }

    4.求数组元素最大值

    手动求最大值的过程是什么,遍历+比较,过程如下:

    例如,求3,2,6,7,2,4的最大值:先设置最大值max=-999999,然后将max和数组元素逐个(遍历)比较如果a[i]>max,则更新max的值为a[i],否则max不变,继续向后遍历,直到遍历结束.

    max<3,则max=3

    max>2,max=3不变

    max<6,则max=6

    max<7,则max=7

    max>2,max=7不变

    max>4,max=7不变

    遍历结束,max=7为最大值.

    和求和类似,递归的公式如下:

    其中max为求两个数的较大值函数,F为求多个数的最大值的递归函数.代码如下:#includeusing namespace std;

    #define max(a,b) (a>b?a:b)

    int F(int a[],int s,int e){ if(s==e) return a[s]; else if(s+1 == e)//递归边界

    return max(a[s],a[e]);

    return max(a[s],F(a,s+1,e));//递归公式!!!}

    int main(){ int a[] = {5,1,4,6,2}; int s = 0,e = 4; cout << F(a,s,e) << endl;

    return 0;

    }

    以上就是c语言递归函数的使用方法介绍,详细使用情况还得要大家自己使用过才能知道具体要领。如果想阅读更多相关内容的文章,欢迎关注亿速云行业资讯频道!

    展开全文
  • 主要介绍了C语言递归实现线索二叉树,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • C语言递归函数的执行与求解导语:函数的递归调用是在调用一个函数的执行过程中,直接或间接地调用该函数本身,使用递归函数的程序结构清晰,简单、易懂。下面就由小编为大家介绍一下C语言递归函数的执行与求解,欢迎...

    C语言递归函数的执行与求解

    导语:函数的递归调用是在调用一个函数的执行过程中,直接或间接地调用该函数本身,使用递归函数的程序结构清晰,简单、易懂。下面就由小编为大家介绍一下C语言递归函数的执行与求解,欢迎大家阅读!

    1 递归函数

    C语言的特点之一就在于允许函数的递归调用,即允许在函数内部直接或间接的调用函数自身,被调用的函数被称为递归函数。递归调用有直接递归调用和间接递归调用两种形式,递归函数常用于解决那些需要分多次求解且每次求解过程都基本类似的问题。构造递归函数的关键在于寻找递归算法和终结条件。递归算法就是解决问题所采取的方法和步骤,一般只要对问题的若干次求解过程进行分析和归纳,找出每一次求解过程之间的规律性,就可归纳出递归算法,终结条件是为了终结函数的递归调用而设置的一个条件或规则。递归调用的一般形式为:

    函数类型 函数名(参数列表)

    {

    ,,,,,

    函数名(参数列表)

    …..

    }

    2 递归条件

    使用递归调用编写程序时,要注意以下几点:

    (1)可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式,只是所处理的对象具有一定的规律性。也就是说解决问题的方法相同,调用函数的参数有规律的递增或递减。

    (2)递归函数必须有一个终止处理条件,即必须有一个明确的结束条件,必须在适当的时候能够结束递归调用,否则会使程序陷入死循环,导致系统崩溃。

    (3)有些使用递归算法求解的问题也可使用普通循环算法来实现,相较于循环程序,递归程序结构简单,逻辑清晰,但运行效率低,故在有其他算法可以代替的情况下,要尽量避免使用递归算法编写程序。

    3 递归实例

    例:使用递归方法求n!。

    在数学上n!=1×2×3×…×n-1×n,我们可以写成以下形式

    1 当n=0或n=1时

    n!=

    (n-1)!×n 当n>1时

    根据以上形式,可以写出如下递归调用程序:

    int f(n)

    {

    if(n==1||n==0)

    return 1;

    else

    return f(n-1)*n;

    }

    int main()

    {

    int n;

    scanf(“%d”,&n);

    if(n<0)

    printf(“data error!”);

    else

    printf(“%d”,f(n));

    return 0;

    }

    4 递归函数执行过程

    递归调用之所以能够实现,是因为函数在每一次执行过程中,都会把自己所有形参变量和局部变量复制一个副本,压入栈中,这些副本分别位于栈中不同的内存空间,和函数的其他执行过程毫不相干,这种机制使得递归调用成为可能。一个递归函数的执行过程类似于调用函数和被调用函数是同一个函数的多层嵌套调用,因此,和递归函数的执行过程密切相关的一个重要概念就是递归函数运行的层次。假设调用该递归函数的主函数为第0层,则从主函数调用递归函数则进入第一层;从第n层调用本函数则进入“下一层”,即第n+1层。反之,退出第n层递归调用应返回至“上一层”,即第n-1层。

    在递归函数的执行过程中,另一个非常重要的概念是“递归工作栈”的使用,当一个函数(调用者)调用另外一个函数(被调用者)时,系统会把调用者的所有实在参数,被调用者的形式参数、局部变量,以及调用者的返回地址等信息全部压入“递归工作栈”暂存,当被调用者执行完毕时,系统会从栈中弹出被调用者的形式参数和局部变量,释放被调用者所占用的数据区,接着被调用者返回,然后系统从栈中弹出调用者的返回地址,和实在参数等信息,此时调用者函数可以继续执行下去。

    5 求解方法

    我们通过举例来说具体说明递归函数的求解,比如在主函数中输入n的值为5,即求5!,则函数的求解过程可以用图1-1表示:

    以上问题的具体求解过程描述如下:①调用函数f(5),n=5,函数f(5)的返回结果是f(4)*5,系统暂存f(5)的形参和中间计算结果,然后转去调用函数f(4)。②执行函数f(4),n=4,函数f(4)的返回结果是f(3)*4,系统暂存f(4)的形参和中间计算结果,然后转去调用函数f(3)。③执行函数f(3),n=3,函数f(3)的返回结果是f(2)*3,系统暂存f(3)的形参和中间计算结果,然后转去调用函数f(2)。④执行函数f(2),n=2,函数f(2)的返回结果是f(1)*2,系统暂存f(2)的形参和中间计算结果,然后转去调用函数f(1)。⑤执行函数f(1),n=1,函数f(1)返回结果1,f(1)执行完毕,系统释放f(1)的.形参和中间变量所占的数据区,然后返回到调用函数f(1)处。⑥函数f(2)返回结果f(1)*2=1*2=2,f(2)执行完毕,系统释放f(2)的形参和中间变量所占的数据区,然后返回到调用函数f(2)处。⑦函数f(3)返回结果f(2)*3=2*3=6,f(3)执行完毕,系统释放f(3)的形参和中间变量所占的数据区,然后返回到调用函数f(3)处。⑧函数f(4)的返回结果f(3)*4=6*4=24,f(4)执行完毕,系统释放f(4)的形参和中间变量所占的数据区,然后返回到调用函数f(4)处。⑨函数f(5)返回结果f(4)*5=24*5=120,f(5)执行完毕,系统释放f(5)的形参和中间变量所占的数据区,然后返回到调用函数f(5)处,即main函数,此问题求解结束。

    6 结束语

    函数的递归调用,可以把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归算法只需用少量的程序就可描述出解题过程所需要的多次重复计算,大大减少了程序的代码量并增强了程序的可读性。但在求解过程中容易出错和混淆,了解递归函数的执行过程,并借助于图示化的方法、,即可正确、快速求解递归函数。

    展开全文
  • C语言递归算法程序.doc
  • C语言递归算法程序.rar
  • 浅析C语言递归算法

    2012-08-31 14:21:53
    浅析C语言递归算法
  • C语言递归函数设计

    2013-12-19 11:15:33
    C语言递归函数设计,如何使用递归函数进行算法计算,这样可以提高程序的质量
  • 8皇后问题 C语言 递归

    2009-08-04 15:06:01
    8皇后 8queens C语言 递归 8皇后 8queens C语言 递归
  • C语言递归实现素数分解 C语言初学者必会
  • C语言递归实现逆序程序 C语言初学者必会
  • C语言递归方法求解背包问题C语言递归方法求解背包问题,编译环境vs2019上问题:上代码: C语言递归方法求解背包问题,编译环境vs2019 上问题: 十、背包问题的求解 假设有一个能装入总体积为T的背包和n件体积分别为...
  • c语言递归解决汉诺塔问题
  • 本篇文章是对使用C语言递归与非递归实现字符串反转函数char *reverse(char *str)进行了详细的分析介绍,需要的朋友参考下
  • C语言递归和非递归分别实现strlen 1.非递归的方法实现strlen int mystrlen(char* buf) { int count = 0; while (*buf != '\0') { count++; *buf++; } return count; } int main() { char buf[] = "welcome ...
  • 本文是一个24点扑克游戏的C语言递归程序
  • c语言递归求阶乘源码

    2012-03-13 15:13:35
    c语言递归求阶乘源码 递归求阶乘的方法 这里分享给大家 有需要的你 就不用浪费时间去找了啊
  • C语言递归实现二分法查找

    千次阅读 2019-03-06 03:03:14
    专升本过程中遇到的问题,现用C语言递归实现二分法查找算法,本人的第一篇博文,如有错误,还请指正! 关于二分法的详细介绍,请看链接 /* 递归实现二分法查找 语言:C语言 开发环境:Windows 10 + VC++6.0 代码...
  • C语言递归查找最大值程序 C语言初学者必会
  • C语言递归求阶乘

    2020-03-26 19:47:47
    C语言递归求阶乘 #include <stdio.h> #include <stdlib.h> int fac(int n) { if (n <= 1) { return 1; } else { return n*fac(n - 1); } } int main() { ...
  • C语言 递归法求阶乘

    2020-08-30 18:18:05
    C语言 递归法求阶乘 利用一个函数进行递归求阶乘,但该数不能小于0,且若为0或1,得到的结果都为1,其他情况,对该数不断递归 #include <stdio.h> #include <stdlib.h> int main() { int fac(int n); /...
  • c语言递归遍历指定文件夹下所有文件算法
  • c语言递归联系很多题(附答案),很经典的资料

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 93,524
精华内容 37,409
关键字:

c语言递归

c语言 订阅