Fibnacci数列的定义为:F0=0,F1=1,Fn=Fn-1+Fn-2(n≥2,n∈N*),要计算该数列的任意项Fn,既可以采用递归方式编程也可以采用循环语句编程,由于( ),所以需要较多的运行时间。A.递归代码经编译后形成较长目标代码B.递归代码执行时多次复制同一段目标代码C.递归代码执行时需要进行一系列的函数调用及返回且存在重复计算D.递归代码执行过程中重复存取相同的数据
Fibnacci数列的定义为:F0=0,F1=1,Fn=Fn-1+Fn-2(n≥2,n∈N*),要计算该数列的任意项Fn,既可以采用递归方式编程也可以采用循环语句编程,由于( ),所以需要较多的运行时间。
A.递归代码经编译后形成较长目标代码
B.递归代码执行时多次复制同一段目标代码
C.递归代码执行时需要进行一系列的函数调用及返回且存在重复计算
D.递归代码执行过程中重复存取相同的数据
B.递归代码执行时多次复制同一段目标代码
C.递归代码执行时需要进行一系列的函数调用及返回且存在重复计算
D.递归代码执行过程中重复存取相同的数据
参考解析
解析:本题考查程序语言基础知识。
分析递归代码执行过程可知,由于调用函数时系统需要在栈区开辟支持函数运行时需要的空间(大多数局部变量的存储单元即分配在此空间中),同时还需造成控制流的转移、返回位置的记录和恢复等工作,同时在该例子中存在着重复计算,例如计算只时要通过递归调用分别计算F3和F2,而在计算F3时,则要通过递归调用分别计算F2和F1,其中F2的计算会重复,因此递归代码执行时需要进行一系列的函数调用及返回且存在重复计算都是比较耗时的。
分析递归代码执行过程可知,由于调用函数时系统需要在栈区开辟支持函数运行时需要的空间(大多数局部变量的存储单元即分配在此空间中),同时还需造成控制流的转移、返回位置的记录和恢复等工作,同时在该例子中存在着重复计算,例如计算只时要通过递归调用分别计算F3和F2,而在计算F3时,则要通过递归调用分别计算F2和F1,其中F2的计算会重复,因此递归代码执行时需要进行一系列的函数调用及返回且存在重复计算都是比较耗时的。
相关考题:
●当程序运行陷于死循环时,说明程序中存在 (41) 。在C语言中,函数定义及函数调用应该遵循的原则是 (42) 。以求n!为例,采用递归方式编写的程序相对于递推方式的程序执行效率较低的原因是 (43) 。(41) A.词法错误B.静态的语义错误C.语法错误D.动态的语义错误(42) A.可以进行函数的嵌套定义,不可以进行函数的嵌套调用B.不可以进行函数的嵌套定义,可以进行函数的嵌套调用C.既不能进行函数的嵌套定义,也不能进行函数的嵌套调用D.既可以进行函数的嵌套定义,也可以进行函数的嵌套调用(43) A.递归程序经编译后形成较长目标代码,所以需要较多的运行时间B.递归程序执行过程中重复存取相同的数据占用了较多的时间C.递归程序执行时一系列的函数调用及返回占用了较多的时间D.递归程序执行时多次复制同一段目标代码占用了较多的时间
( 8 )已知递归函数 f 的定义如下:int f(int n){if (n = 1) return 1; // 递归结束情况else return n * f(n-2); // 递归 }则函数调用语句 f(5) 的返回值是 【 8 】 。
已知递归函数f的定义如下:int f(int n){if(n<= 1)return 1;//递归结束情况f5=5*f3=5*3*f1else return n*f(n-2); //递归}则函数调用语句f(5)的返回值是______。
( 9 )下面的函数利用递归实现了求 1+2+3+ …… +n 的功能:int sum ( int n ) {if ( n==0 )return 0;elsereturn n+sum ( n-1 ) ;}在执行 sum ( 10 )的过程中,递归调用 sum 函数的次数是【 9 】 。
已知递归函数fun的定义如下: int fun(int n) { if(n<=1)return 1;//递归结束情况 else return n*fun(n-2);//递归 } 则函数调用语句fun(5)的返回值是( )。A.5B.12C.15D.30
阅读以下说明和C函数代码,回答问题并将解答写在对应栏内。【说明】著名的菲波那契数列定义式为f1=1 f2=1 fn=fn-1+fn-2 (n=3,4,…)因此,从第1项开始的该数列为1,1,2,3,5,8,13,21,…。函数fibl和fib2分别用递归方式和迭代方式求解菲波那契数列的第n项(调用fib1、fib2时可确保参数n获得一个正整数)。【C函数代码】函数fib1和fib2存在错误,只需分别修改其中的一行代码即可改正错误。(1)函数fib1不能通过编译,请写出fib1中错误所在行修改正确后的完整代码。(2)函数fib2在n≤2时不能获得正确结果,请写出fib2中错误所在行修改正确后的完整代码。
设有一个递归算法如下 im fact(int n){ if(n<=0)return 1; else return n * fact(n-1); } 下面正确的叙述是(35)。A.计算fact(n)需要执行n次函数调用B.计算fact(n)需要执行n+1次函数调用C.计算fact(n)需要执行n+2次函数调用D.计算fact(n)需要执行n-1次函数调用
已知递归函数f(n)的功能是计算1+2+…+n,且n≥1,应采用的代码段是______。A.if n>1 then return 1 else return n+f(n-1)B.if n>1 then return 1 else return n+f(n+1)C.if n<1 then return 0 else return n+f(n-1)D.if n<1 then return 0 else return n+f(n+1)
已知递归函数f(n)的功能是打印n,n-1,…,1,且n>=1,应采用的代码段是(42)。A.if n>1 then f(n-1); printf("% d",n);B.if n<1 then f(n+1); printf("% d", n);C.printf("% d",n); if n>1 then f(n-1);D.printf("% d", n); if n<1 then f(n+1);
已知递归函数fun的定义如下: int fun(int n) { if(n<=1)return1;//递归结束情况 else return n*fun(n-2);//递归 } 则函数调用语句fun(5)的返回值是( )。A.5B.12C.15D.30
试题四(共 15 分)阅读以下说明和 C 函数代码,回答问题并将解答写在答题纸的对应栏内。[说明]著名的菲波那契数列定义式为f1 = 1 f2 = 1 fn = fn-1 + fn-2 (n = 3,4,…)因此,从第 1 项开始的该数列为 1,1,2,3,5,8,13,21,…。函数 fib1 和 fib2 分别用递归方式和迭代方式求解菲波那契数列的第 n 项(调用 fib1、fib2 时可确保参数 n 获得一个正整数) 。[C函数代码][问题 1](6 分)函数 fib1 和 fib2 存在错误,只需分别修改其中的一行代码即可改正错误。(1)函数 fib1 不能通过编译,请写出 fib1 中错误所在行修改正确后的完整代码;(2)函数 fib2 在n≤2 时不能获得正确结果,请写出 fib2 中错误所在行修改正确后的完整代码。[问题 2](3 分)将函数 fib1 和 fib2 改正后进行测试,发现前 46 项都正确,而第 47 项的值是一个负数,请说明原因。[问题 3](6 分)函数 fib1、fib2 求得菲波那契数列第 n 项(n40)的速度并不相同,请指出速度慢的函数名,并简要说明原因。
已知递归函数f的定义如下:int f(int n){if(n <=1)return 1; //递归结束情况else return n*f(n-2); //递归}则函数调用语句f(5)的返回值是【 】。
设n的初值为正整数,设计一个递归算法如下:int fact(int n){if(n<=0)return 1;else return(n*fact(n-1));}以下叙述中,正确的是______。A.计算fact(n)需要执行n+2次函数调用B.计算fact(n)需要执行n+1次函数调用C.计算fact(n)需要执行n次函数调用D.计算fact(n)需要执行n-1次函数调用
递归的好处描述不正确的是()。A、只需少量的程序就可描述出解题过程所需要的多次重复计算B、需要大量的程序就可描述出解题过程所需要的多次重复计算C、大大地增加了程序的代码量D、大大地减少了程序的代码量
多选题递归的好处描述不正确的是()。A只需少量的程序就可描述出解题过程所需要的多次重复计算B需要大量的程序就可描述出解题过程所需要的多次重复计算C大大地增加了程序的代码量D大大地减少了程序的代码量