精华内容
下载资源
问答
  • 2021-05-26 01:52:43

    下列给定程序中,函数fun()的功能是:应用递归算法求某数a的平方根。求平方根的迭代公式如下:

    29f5b2e59719ffa1e3d07f016aa78d16.png

    例如,2的平方根为1.414214。

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序:

    include <math. h>

    include <stdio. h>

    /*************found**************/

    fun(double a,double x0)

    { double xl,y;

    xl= (x0+a/x0)/2.0;

    /*************found**************/

    if (fabs (xl-x0) >0.00001)

    y=fun (a, xl);

    else y=x1;

    return y;

    }

    main ( )

    { double x;

    printf("Enter x: "); scanf("%1f",&x);

    printf ("The square root of %1f is %1f\n",

    x, fun(x,l.O));

    }

    更多相关内容
  • 下列文法,用递归下降分析法对任意输入的符号串进行分析: (1)E->eBaA (2)A->a|bAcB (3)B->dEd|aC (4)C->e|dC 输出的格式如下: (1)递归下降分析程序,编制人:姓名,学号,班级 (2)输入以#结束的符号...
  • 用C语言编写一个递归程序用来计算:1*2+2*3+3*4+.+(n-1)*n以下文字资料是由(历史新知网...用C语言编写一个递归程序用来计算:1*2+2*3+3*4+.+(n-1)*nint fun(int n){if(n==2){return 2;}else{return fun(n-1)+(n-1)*...

    用C语言编写一个递归程序用来计算:1*2+2*3+3*4+.+(n-1)*n以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    f93e034c348e4b4698c48825bcdbba17.png

    用C语言编写一个递归程序用来计算:1*2+2*3+3*4+.+(n-1)*n

    int fun(int n){

    if(n==2){

    return 2;

    }else{

    return fun(n-1)+(n-1)*n;

    }

    }

    int main(int argc, char* argv[])

    {

    printf("fun(3)=%d\n", fun(3));

    return 0;

    }

    编写一个递归子程序 计算N! (N)=0)的程序 最好用C语言

    这样写: #include long fun(int n); void main() { int n; printf("请输入n的值:\n"); scanf("%d",&n); printf("这个数的阶乘是:%d\n",fun(n)); } long fun(int n) { if(n==1 || n==0) return 1; else return n*fun(n-1); }

    采纳哦

    用汇编语言编写“计算1+2*3+3*4.+N*(N+1)”的程序

    M equ 自行定义,界定循环次数

    N equ #2

    S equ #1

    Start:LDA #(N-1)

    Loop:INCA ;A寄存器值加一

    MOV A,B ;把A寄存器值放到B寄存器中

    INCB

    JSR Count ;跳转到Count子程序,进行计算

    CMPA #M ;判断循环条件

    BLO loop ;小于M的话继续循环

    Print:输出

    Count:MUL A,B

    RTS

    对应C代码如下:

    #Define M 自行定义,界定循环次数

    main()

    {

    int S=1;

    int N;

    for(N=2;N

    {

    S+=N*(N+1);

    }

    printf("d%",S);

    }

    谁能跟我编写一个程序(C语言)题目是编写一个函数计算sum(n)=1+2+3+。+n(n>=1)

    int Cal(int n)

    {

    sum=0;

    for(int i= 1;i<=n;++i)

    sum+=i;

    return sum;

    }

    求1×2+2×3+3×4+.+(n-1)×n

    先提供一个特殊数列的前n项和公式:

    1+4+9+16+……+n² = n(n+1)(2n+1)/6

    再看题目中的

    (n-1)×n = n² - n

    因此,

    原式= [1+4+9+16+……+n²] - [1+2+3+4+……+n]

    =n(n+1)(2n+1)/6 - n(n+1)/2

    =n(n+1)(n-1)/3

    用汇编语言编写“计算1+2*3+3*4.+N*(N+1)且N*(N+I)<200”的程序

    code segment

    assume cs:codestart:

    mov cx,1

    mov ax,2

    next:

    cmp cx,200

    jge exit

    inc al

    mov bl,al

    dec bl

    mul bl

    add cx,ax

    mov ax,0

    mov al,bl

    inc al

    jmp next

    exit:

    mov al,bl AAM

    mov dl,ah

    mov bl,al

    add dl,30h

    mov ah,2

    int 21h

    mov dl,bl

    add dl,30h

    mov ah,2

    int 21h

    mov ah,4ch

    int 21h

    code ends

    end start

    编写递归程序,计算n! m!

    看到有人写帖子问如果从m个数组中取N个原始的算法,要求一个是递归的,一个不是递归的。

    递归的解法:(比较笨)

    void getn(int a[], int b[] , int m, int n, int index,int lastindex)

    {

    int i = lastindex + 1;

    if(index == n )

    {

    int x;

    for(x = 0 ; x < n ;x ++)

    {

    printf(" %d ",a[b[x]]);

    }

    printf(" ");

    return ;

    }

    while( i < m)

    {

    b[index] = i;

    getn(a,b,m,n,index + 1,i);

    i ++ ;

    }

    }

    非递归的解法:

    void agen(int a[],int m, int n)

    {

    int i ,j ;

    int b[100] = {0};

    i = j = 0;

    while(b[0] < m ) {

    while( i < m) {

    if(j == n - 1 ) {

    int x ;

    for( x = 0 ; x < n ; x ++) {

    printf(" %d ",a[b[x]]);

    }

    printf(" ");

    } else {

    j ++;

    }

    i ++;

    b[j] = i;

    }

    do {

    j --;

    b[j] ++ ;

    } while(b[j] >= m );

    i = b[j] ;

    }

    }

    测试的主程序:

    int main()

    {

    int a[10] = {0, 1,2,3,4,5,6,7,8,9};

    int b[20] ={0};

    getn(a,b,10,5,0,-1);

    agen(a,10,5);

    return 0;

    }

    用PASCAL语言编写一个求1+2+3+.+N的程序

    var s,i,n:long;

    begin

    write('N=');

    readln(n);

    s:=0;

    for i:=1 to n do

    s:=s+i;

    writeln(s);

    end.

    编写计算(1+2-3+4-5+。-(n-1)+n)的程序

    你好 我来回答你的问题

    其实很好解决 用-1这个特殊的数来做

    main()

    { int i,j=1,k=0;

    for(i=1;i<=100;i++)

    { j=-1*j;

    k=j*i+k; }

    printf("%d",k);

    getch();

    }

    看懂了吗 每回循环j都乘一次-1 也是j就从-1,1,-1,1来回变幻

    你再乘以i i不就是正数负数的各一个变一次了吗 对吧?

    我的C语言群34811055有什么问题可以加 还有我的QQ415654090

    用VB程序编写一个过程来计算1+2+3+4+……+100的值。

    Dim a As Integer '首项

    Dim b As Integer '末项

    Dim c As Integer '项数

    Dim d As Integer '结果

    Public Sub Add()

    a = InputBox("首项", "")

    b = InputBox("末项", "")

    c = InputBox("项数", "")

    d = (a + b) * c / 2

    MsgBox d

    End Sub

    Private Sub Form_Load()

    Call Add

    End Sub

    针对这个问题首项=1,末项=100,项数=100

    end sub

    分页:123

    展开全文
  • 一:实验目的 1.掌握递归程序设计的方法。明确递归的概念,通过对问题的分析,找出递归关系以及递归出口以对问题进行递归结构设计;...1.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只...

    一:实验目的

    1.掌握递归程序设计的方法。明确递归的概念,通过对问题的分析,找出递归关系以及递归出口以对问题进行递归结构设计;
    2.掌握递归程序转换为非递归程序的方法。

    二:实验内容

    用递归方法设计下列各题,并给出每道题目的递归出口(递归结束的条件)和递归表达式。同时考虑题目可否设计为非递归方法,如果可以,设计出非递归的算法。

    1.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?

    2.角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。
    如:输入22,
    输出 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

    三、流程图

    内容二:
    在这里插入图片描述

    四:代码部分

    内容一:

    #include<iostream>
    using namespace std;
    
    class duck
    {
    public:
    	int hamlet;     //统计村子数量
    	int i;
    	duck()
    	{
    		hamlet=7;
    		i=2;
    	}
    
    	int home()
    	{
    		
    		i=(i+1)*2;
    		cout<<"第"<<hamlet<<"个村子卖了"<<i/2+1<<"个鸭子"<<endl;
    		hamlet--;
    		while(hamlet!=0)
    		{
    			home();
    		}
    
    //		if(hamlet==0)cout<<"刚开始有"<<i<<"只鸭子"<<endl;
    
    	return 0;
    	}
    		
    };
    
    
    
    
    void main()
    {
    /*
    	jiaogu exam1;
    	exam1.home();
    	exam1.doit();
    	cout<<"step="<<exam1.i<<endl;
    */
    	duck exam2;
    	exam2.home();
    	cout<<"刚开始有"<<exam2.i<<"只鸭子"<<endl;
    
    
    
    }
    

    内容二:

    #include<iostream>
    using namespace std;
    
    class jiaogu
    {
    public:
    	int i;
    	int m;
    
    	jiaogu()
    	{
    		i=1;
    		m=0;
    	}
    
    	int home()
    	{
    		cout<<"请输入一个自然数"<<endl;
    		cin>>m;
    		while(m<0)
    		{
    			cout<<"请按照要求输入"<<endl;
    			cin>>m;
    		}
    		return 0;
    	}
    
    	int doit()
    	{
    		if(m!=1)
    		{
    			if(m%2==0) m=m/2;
    			else m=m*3+1;
    			cout<<m<<endl;
    			i++;
    		}
    		while(m!=1)
    		{
    			doit();
    		}
    		return 0;
    	}
    };
    
    void main()
    {
    	while(1)
    	{
    
    		jiaogu exam1;
    		exam1.home();
    		exam1.doit();
    		cout<<"step="<<exam1.i<<endl;
    	}
    }
    
    

    五:遇到的问题及解决办法

    问题一:
    i
    i的值没有初始化
    调试
    调试查看发现初始化函数出错了,及时做了修改

    六:收获及总结

    虽然本次用了面向对象的方法,但是还是运用的面向过程的思维。所以我用C++语言完成本次实验。
    通过这2个案例,函数如果递归调用到了本身,就如同回到函数跳回到刚开始一样,达到条件后方可退出循环。通过函数的递归调用,可大大减少代码的数量,提高代码的质量,并且让程序更加清晰可读;但这同时也意味着程序制作者有着更加清晰的思路去解决所遇到的问题。

    展开全文
  • 下列文法中选做题: 针对算术表达式文法:E→TE’ E’ → +TE’|ε T→FT’ T’ →*FT’ |ε F→(E) |i 为其编写递归下降子程序,判定某个算术表达式是否正确:如j+k*m,j*k+m 输入:其输入数据应该为词法...
  • C语言递归下降语法分析程序 ,可以看看。
  • 递归下降法编写一个语法分析程序,使之与词法分析器结合,能够根据语言的上下文无关文法,识别输入的单词序列是否文法的句子。 对下列文法,用递归下降分析法对任意输入的符号串进行分析: E->TG G->+TG|-TG ...
  • 递归下降分析程序的设计和实现

    万次阅读 2019-10-29 16:11:32
    递归下降分析程序的设计和实现 、实验的目的和要求 1、了解语法分析的主要...先将递归下降分析程序的生成认真的学习遍,理解递归下降分析程序的构成过程。 已知文法G[S]: S → aB | bD B → bC C → aS...

    递归下降分析程序的设计和实现

    一、实验的目的和要求
    1、了解语法分析的主要任务。
    2、实现基本的递归下降分析器,能够分析任意的符号串是否为该文法所定义的合法算术表达式。
    
    二、实验环境
    Windows7 + Dev-C++
    
    三、实验准备
    先将递归下降分析程序的生成认真的学习一遍,理解递归下降分析程序的构成过程。
    
    已知文法G[S]:
    		S → aB | bD
    		B → bC
    		C → aS | bD | ε
    		D → aB | bD | ε
    
    1. 经观察此文法不含左公因式,也不含左递归,求出此文法的FIRST、FOLLOW以及SELECT集。
    产生式FIRSTFOLLOWSELECT
    S → aB{a}{#}{a}
    S → bD{b}{b}
    B → bC{b}{#}{b}
    C → aS{a}{#}{a}
    C → bD{b}{#}{b}
    C → ε{ε}{#}
    D → aB{a}{#}{a}
    D → bD{b}{b}
    D → ε{ε}{#}
    1. 因为S、B、C、D的SELECT集有交集且为空,所以此文法为LL(1)文法。

    2. 测试用例如下(文法推导所得,推导过程略):

      ab
      abb
      abaab
      ababbbbbbbbb
      bbbbbbbbbbbbbbbbbbbbbbbbbbb
      baaaaabbbb(错误用例)
      a##b#(错误用例)
      abcdefg(错误用例)
      ABCDEFG(错误用例)
      
    四、实验内容及步骤

    1. 用递归下降分析程序测试自己写的文法

    #include<stdio.h>
    
    // 函数声明
    void S(void);
    void B(void);
    void C(void);
    void D(void);
    // 定义一个长度为100的字符数组
    char s[100];
    // 用来作数组索引,当每次匹配成功存入数据时index自增1
    int i;
    //  用来标记语句是否正确
    int SIGN;
    
    int main()
    {
        printf("please input a yuju ends with #\n");
        // 一个死循环
        while( 1 )
        {
            SIGN = 0;//语句是否正确用SIGN
            i=0;
            
            // 类似Java中的Scanner,读取输入的字符串
            scanf("%s",&s[0]);
            
            // 当输入的第一个字符为#时,程序直接结束
            if( s[0] == '#')
                return 0;
                 
            S();
            // 如果最后的字符以#结束则输出下面
            if(s[i] == '#' && SIGN == 0){
                printf("This is a right yuju!\n");
            }else{
                printf("This a wrong yuju\n");
            }
            printf("please input a yuju ends with #\n");
        }
        return 1;
    }
    
    void S()
    {
        if(SIGN==0)
        {
            // 当输入的字符串中首字母为a时
            if(s[i]=='a'){
                ++i;    // 自增操作
                B();
            }else if(s[i]=='b'){
                ++i;
                D();
            }else{
                SIGN=1;
            }
        }
    }
    
    void B()
    {
        if(SIGN==0){
           if(s[i]=='b'){
                ++i;
                C();
            }else if(s[i] == '#'){
                SIGN=1;
            }
        }
    }
    
    void C()
    {
        if(SIGN==0){
            if(s[i]=='a'){
                ++i;
                S();
            }else if(s[i]=='b'){
                ++i;
                D();
            }else if(s[i]!='#'){
                SIGN=1;
            }
        }
    }
    
    void D()
    {
        if(SIGN==0){
            if(s[i]=='a'){
                ++i;
                B();
            }else if(s[i]=='b'){
                ++i;
                D();
            }else if(s[i]!='#'){
                SIGN=1;
            }
        }
    }
    

    注: 此代码正好100行,不过可以看出代码质量很差(冗余代码很多),每个函数中的功能都是一样的,应该抽取一下,代码应该可以简洁很多。

    2. 测试用例测试如下
    在这里插入图片描述

    五、实验小结

    1. 遇到的主要问题
    答:
    刚开始测试测试用例时,根据文法推导的句子在程序中一直报错,首先我确定自己推导没有问题,又看了程序代码好像也没有问题,找了好久没有找到,最后使用Xcode(Mac平台下由apple公司维护用来开发iPhone程序和Mac程序的一款集成开发环境)打断点通过单步调试把问题找了出来,因为我把s[i] = ‘p’ 写成了s[i] = ‘P’ 将小写字母写成了大写。这就表现出调试程序的重要性,通过调试可以看计算机如何一步步来执行程序的,对程序有更好的理解。(附上一张调试图)
    在这里插入图片描述
    这是S函数,当我从控制台录入pba时,第一个字符p和s[i]相同,但是当程序执行直接从39行调到了45行,没有执行if(s[i] == ‘P’)语句,我才找到上面所说的错误!

    3. 得到的经验
    答:
    ①:C语言函数声明,这和Java以及其他编程语言不相同,当在main()函数中调用其他函数时,编译器会在main()函数上面找这些函数,如果函数没有声明就会编译报错(找不到),若将函数写在main()函数上,就不会报错。
    ②:首先更加清晰的理解了语法分析的主要任务,它是在词法分析的基础上将单词组合起来,组成一些语句,比如说在Java中,public static void main(String[]args);方法中,如果void写在public前面编译器就会报错,那是因为编译器已经做好了语法分析的工作,说白了对源代码在结构是否正确这就是语法分析的任务。
    ③:理解了递归下降分析法,它是一种自顶向下的分析,根据文法来构造C函数,遇到终结符时通过和自己在屏幕中录入的数据作比较,若相同修改数组索引,这个终结符后面若是一个非终结符则调用这个非终结符的函数。一层一层的向下分析,有时会在函数体中调用自己,这就形成了递归。

    展开全文
  • 递归算法的非递归实现

    千次阅读 2021-02-28 22:14:13
    单向递归:简单的说是指递归的过程总是朝着一个方向进行。函数1调用函数2再调用函数3…一只不重复调用之前的函数。 尾递归函数是以递归调用结尾的函数,是单向递归的特例。 尾递归递归调用语句只有一个,而且是...
  • 这篇文章主要介绍了python中的函数递归和迭代原理解析,文中通过示例代码介绍的非常详细,... 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相...
  • ## 用递归程序求解随机产生一个正整数n(n>=100000),确定n是否是它所有因子之和(完数) ## 了解什么是因子:因子就是所有可以整除这个数的数,不包括这个数自身,例如:6的因子为1,2,3。 完数:即某正整数的所有...
  • 递归实现汉诺塔

    2017-12-06 20:26:59
    1、此程序为汉诺塔程序(此代码用到递归,包括直接递归和间接递归(间接递归是用在了重复使用本程序那块)); 2、此程序的代码流程是,由main函数进入之后,先后调用的函数是由上至下定义的; 3、亲爱的朋友,请...
  • 第七章 动态内存分配习题 基本概念与基础知识自测题 7.1 填空题 7.1.1 C/C++定义了4内存区间 1 2 3 和 4 答案1代码区存放程序代码 2全局变量与静态变量区存放全局变量或对象包括静态 3局部变量区即栈stack区...
  • 编译原理课程 实验报告 题目 用递归下降法进行表达式分析 专业 班级 学号 姓名 . 实验题目 用递归下降法进行语法分析的方法 二 . 实验日期 三 . 实验环境操作系统开发语言 专业资料 . 操作系统是 Windows 开发...
  • 对文法 G: E→E+T|T 构造出G的递归下降分析程序程序显示输出 T→T*F|F 匹配过程(即自上而下生成语法分析树的步骤, F→(E)|i 输出各匹配产生式序号即可)。
  • 情编写一个完整的程序,利用递归算法计算斐波那契数列的第N项,并输出;斐波那契数列的各数列的产生可用下列公式表示:U1=0 U2=; Un=U(n-1)+U(n-2)(当n>2时)可以使用任何语言,最好使用java语言 代码: public...
  • 递归方法设计下列各题,并给出每道题目的递归出口(递归结束的条件)和递归表达式。同时考虑题目可否设计为非递归方法,如果可以,设计出非递归的算法。 1.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶...
  • 掌握递归下降语法分析程序的设计思想,加深对递归下降语法分析程序的理解。 通过设计编制调试具体的YACC程序,掌握YACC源程序的基本组成。 实验内容: 1. 对PL/0编译程序进行裁减和改造,使其仅包含词法和语法分析...
  • 超星高级语言程序设计实验作业 实验06 递归程序设计 注:以下内容仅供交流,代码都是本人自己写的,还请同学们先自己编写再进行交流。
  • 关于面试总结5-python笔试题(递归)

    千次阅读 2020-12-05 13:47:46
    前言本篇继续收集一些常见的python笔试题,以基础知识为主,递归是面试最喜欢考的一个问题,不管是做开发还是测试,都无法避免考递归。...函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传...
  • 下列文法,用递归下降分析法对任意输入的符号串进行分析: (1)E->eBaA (2)A->a|bAcB (3)B->dEd|aC (4)C->e|dc 输出的格式如下: (1)递归下降分析程序,编制人:姓名,学号,班级 (2)输入以#结束的符号...
  • 递归法编写一个函数fac,求n!的值以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!用递归法编写一个函数fac,求n!的值#include int func(int n){if(n==...
  • 递归与非递归算法

    2022-02-11 12:45:53
    一、原因:递归算法一般效率更低;有些程序语言不支持递归。 二、方法:将递归算法转换...尾递归是指在递归算法中,递归调用语句只有一个,而且是处在算法的最后。例如求阶乘的递归算法: long fact(int n) {  if(n0)
  • 数学与软件科学学院 实验报告学 期: 2015至 2016第 2学期 2016年 3月 21 日课程名称: 编译原理 专 业: 信息与计算科学 2013级 5班实验编号: 2 实验名称: 递归下降分析器 指导教师: 王...
  • 递归程序设计

    2019-05-29 16:02:52
    递归方法设计下列各题,并给出每道题目的递归出口(递归结束的条件)和递归表达式。同时考虑题目可否设计为非递归方法,如果可以,设计出非递归的算法。 1.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶...
  • 1、 编 译 原 理 实 验 报 告实验名称: 实验二编写...2016 年 4 月 1 日一、实验目的通过设计、编制、调试一个递归下降语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,掌握常用的语法分...
  • 程序为编译原理 递归下降分析器 程序,用c语言编写
  • 递归,定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。 一般来说,能够用递归解决的问题应该满足以下三个条件: 1)需要解决的问题可以转化为一个或多个同构(或同样性质的)子问题来求解,而这些...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,116
精华内容 17,246
关键字:

下列是一个递归程序