精华内容
下载资源
问答
  • c语言递归函数求累加
    千次阅读
    2021-05-14 08:25:32

    C语言用递归求1累加到100求和

    要实现的功能如下

    1+2+3+…+100,用递归实现

    完整源代码实现如下

    #include <stdio.h>
    int x = 0;
    int function(int num);
    int main(
    更多相关内容
  • 【关键词】递归函数 执行过程 求解方法递归调用是在函数内部直接或间接的调用该函数自身,可以把复杂问题转换为较简单的问题,使得程序结构简单、可读性好,同时体现了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

    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 结束语

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

    参考文献

    [1]严蔚敏,吴伟民.数据结构[M].北京:清华大学出版社,1997:55-56.

    作者简介

    常艳(1984-),女,籍贯河南林州。工学硕士,研究方向为计算机教育教学。

    作者单位

    晋城技师学院 山西省晋城市 048000

    展开全文
  • 基于c语言实现的递归函数求阶乘算法示例数据:5120Process returned 0 (0x0) execution time : 1.464 sPress any key to continue.1 /*基于C语言实现的递归函数求阶乘2 */3 #include4 int fun(int a)//Define a ...

    c597c277f9eba9b9602b794d0aea44d5.gif

    基于c语言实现的递归函数求阶乘算法

    示例数据:

    5

    120

    Process returned 0 (0x0)   execution time : 1.464 s

    Press any key to continue.

    1 /*基于C语言实现的递归函数求阶乘

    2 */

    3 #include

    4 int fun(int a)    //Define a function

    5 {

    6   if(a<=1)        //determine whether it is less than 1

    7   return 1; //if less than 1,return 1

    8   else

    9   return(a*fun(a-1));    //otherwise call itself

    10 }

    11 int main()            //define a main function

    12 {

    13    int a;    

    14    scanf("%d",&a);

    15    printf("%d",fun(a));    //call fun

    16    return 0;

    17 }

    注解:

    递归函数就是可以调用本身的函数,在本题第九行中,返回值重新调用了函数本身并将形式参数减一。

    cf1f3f29eec391223555ff246de2db63.png

    编辑:李致远

    排版:李致远

    审核:李致远

    489fbdd81ec1d32d07e8ff08f5665836.png a9bb9057d0f3f2e48513754ae88c8630.png 171c67f2a22ead62e60ab82fc87e950c.png

    一码不扫,
    可以扫天下?

    489fbdd81ec1d32d07e8ff08f5665836.png
    展开全文
  • 总代码 #include #include int tot=0; void addto(int number){ if (number ){ printf("Final:total=%d\n",tot); tot=0; } else{ printf("Now total: %d=%d+%d\n",... } 这就是学习运用多次的递归函数; 这是运行结果

    总代码

    #include <stdio.h>
    #include <stdlib.h>
    int tot=0;
    void addto(int number){
       if (number <= 0){
           printf("Final:total=%d\n",tot);
           tot=0;
       }
       else{
       	printf("Now total: %d=%d+%d\n",tot+number,tot,number);
        tot=tot+number;
         addto(number-1);
       }
    }
    void tesksample(){
       printf("10的递加:\n");
       addto(10);
    }
    int main(){
        tesksample();
        return 0;
    }

    这就是学习运用多次的递归函数;

    这是运行结果

     

    展开全文
  • 一、递归定义 递归定义是数理逻辑和计算机科学用到的一种定义...1、递归函数 int addTo(int paraN) { int tempSum; printf("entering addTo(%d)\r\n", paraN); if (paraN <= 0) { printf(" return 0\r\.
  • 学知识,解决实际问题。(3)从简单问题出发,逐步增加难度,增强解决问题的能力。...四、教学重点与难点学习重点:掌握能针对具体问题找到递归出口、总结归纳出递归函数关系式。学习难点:正确高效的应用递归法分析、...
  • C语言 使用递归函数计算1到n之和

    千次阅读 2020-07-13 17:32:27
    #include <stdio.h> int sum(int n); int main() { int n; scanf("%d", &n); printf ("%d\n", sum(n)); return 0; } int sum(int n){ if(n > 1){ return n + sum(n - 1);...
  • 递归实现累加求和

    2022-05-12 18:17:11
    核心函数(就是一个简单的递归调用,应该没啥好说的吧,哈哈哈哈) int add(int i) { int isum; printf("加到%d\r\n",i); if(i<=0) { return 0; } else { isum=add(i-1)+i; ...
  • 递归函数的简单理解与举例说明
  • #include int sum(int n){ if(n==1) return 1; else return n+sum(n-1); return n; } main() { int n; printf("输入一个整数 n:");... } 函数的意思,核心,以及核心的意思是什么。急用,本人啥也不懂
  • C语言程序举例1、1 到 n 的累加2、递归求阶乘3、递归指数函数4、交集密集函数5、计算Ack函数6、斐波拉契数列7、十进制转二进制8、按顺序输出整数 1、1 到 n 的累加 #include<stdio.h> void main() { int i; ...
  • /* 烟台大学计算机学院 2016 ...问题及描述:立方和累加 递归方法解决 */ #include #include int f(int n); int main() { int n,m; scanf("%d",&n); m=f(n); printf("%d",m); return 0; } int f(int
  • C语言程序“编写由三角形三边面积的函数”要求必须使用函数调用.还要用到海伦公式.#include#includefloatarea(float,float,float);voidmain(){\x09floata,b,c,result;\x09printf("输入三角形的三边:\用C语言 写一...
  • c语言递归求1+2+...加到100的和

    万次阅读 2018-02-13 17:50:19
    有些函数式编程语言是没有循环的,如...下面给出递归算法高斯同学的5050:#include &lt;stdio.h&gt; int add(int n) { if (n &lt; 1) return 0; return n + add(n - 1); } int main(void) { ...
  • c语言递归函数实现n块巧克力有多少种吃法方案
  • #include "stdafx.h"#include int getmul(int n){//递归求阶乘int sum;int temp = 1;if(n<=0){printf("输入的数据错误,不能小于0!\n");return -1;}else{if(n ==1 ){ sum = 1; return sum;}else {sum =n * ...
  • C语言递归法求和(答案原创)

    千次阅读 2019-03-20 21:29:48
    递归函数原型:int Sum(int n); 程序运行结果示例1: Please input n:5↙ sum=15 程序运行结果示例2: Please input n:0↙ data error! 程序运行结果示例3: Please input n:-3↙ data error! 输入提示信息:...
  • Description 现在有不定个数的整型数据(小于15),如12,1!...//阶乘的累加和(要求用递归函数的形式) #include<stdio.h> int fac(int n) { int f; if(n==1) return 1; else f=n*fac(n-1)
  • 本题要求实现一个用递归计算1+2+3+…+n的和的...建议尝试写成递归函数。 裁判测试程序样例: #include <stdio.h> int sum( int n ); int main() { int n; scanf("%d", &n); printf ("%d\n", sum(n))
  • C语言关于函数内容的学习笔记,整理的人很全面,看完这个基本就会用c语言函数
  • //静态全局变量的设置,观察得当c计算结束时返回到栈底时,恰有c的计算次数正好就是k从0开始累加到c计算结束 int y(r) { if (r == 1||r==0) return 1; else return r * y( r - 1); } int x(int n,int r)//...
  • C语言 函数递归

    千次阅读 2017-08-24 11:51:26
    所有的循环都可以写成递归,但递归不一定能写成循环# include <stdio.h>//引用函数库 //递归实现累加 int add_r(int num){ if (num == 0){ return 0; } else{ return add_r(num-1) + num; } } //循环实现累加 ...
  • 一、累加递归 一、代码 二、测试结果 二、汉罗塔问题 一、代码 二、测试结果 一、累加递归 一、代码 //累加递归实现 #include <stdio.h> int addTo(int n) { if(n <= 0) return 0; ...
  • 使用递归函数计算1到n之和

    千次阅读 2022-03-15 16:18:29
    本题要求实现一个用递归计算1+2+3+…+n的和的简单...建议尝试写成递归函数。 裁判测试程序样例: #include <stdio.h> int sum( int n ); int main() { int n; scanf("%d", &n); printf ("%d\n", ...
  • 基本思路:利用dfs的思想,让程序自动检测未填入的格子,填入格子的顺序按照...子函数的流程:1、dfs搜索结束的条件2、开始回溯的条件3、正常情况下填入数字的流程最终效果(在DEV-C++下运行):输入:0053000008000...
  • 递归的应用一、累加 递归:程序调用自身的编程技巧称为递归( recursion)。递归作为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的...
  • 递归(一)n的阶乘 及 n项累加

    千次阅读 2020-03-12 22:42:41
    递归求n的阶乘 利用每次将后面的数字看作整体: sum = n * {(n-1)(n-2) (n-3) *… * 1} n-1 =(n-1){(n-2)(n-3)(n-4)(n-5)(n-6)…*1}的思想,话不多说直接上代码!!!。 虽然是java写的但是原理相同,思路...
  • 递归实现1加到100

    2014-08-11 16:08:24
    递归的方法实现1加到100,新颖的做法
  • 函数调用什么是函数调用呢?通常在C语言中,一个完整的项目程序是不可能在一个函数中实现所有的功能。而是由若干功能不同的函数来实现,并且...函数的调用方式函数C语言的基本组成元素,如果你要想实现函数的功能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,098
精华内容 1,639
关键字:

c语言递归函数求累加