#P8183. 【CSP第一轮】函数与递归ok

【CSP第一轮】函数与递归ok

  1. [8 分]阅读程序写结果:
#include < iostream >
using namespace std;

int rSum(int j)
{
    int sum = 0;
    while (j != 0) {
        sum = sum * 10 + (j % 10);
        j = j / 10;
    }
    return sum;
}

int main()
{
    int n, m, i;
        
    cin>>n>>m;
    for (i = n; i < m; i++)
        if (i == rSum(i))
            cout<< i <<' ';
    return 0;
}

输入:90 120 输出:( {{ input(1) }} )

  1. [8 分]阅读程序写结果:
#include < iostream >
using namespace std;

const int NUM = 5;

int r(int n)
{
    int i;
    if (n <= NUM)
        return n;
    for (i = 1; i <= NUM; i++)
        if (r(n - i) < 0)
            return i;
    return -1;
}

int main()
{
    int n;
        
    cin>>n;
    cout<< r(n) << endl;
    return 0;
}

输入:16 输出:( {{ input(2) }} )

  1. [8 分]阅读程序写结果
#include < iostream >
#include < string >
using namespace std;
int n,i,j,ans;
string s;
char get(int i)
{
	if( i < n) return s[i];
	else return s[i-n];	
}
int main()
{
	cin>>s;
	n=s.size();
	ans=0;
	for(i=1;i<=n-1;i++)
	{
		for(j=0;j<=n-1;j++)
			if(get(i+j) < get(ans+j))
			{
				ans=i;
				break;	
			}
			else if(get(i+j) > get(ans+j)) break;
	}
	for(j=0;j<=n-1;j++) cout << get(ans+j);
	cout<< endl;
	return 0;	
}

输入:CBBADADA 输出:( {{ input(3) }} )

  1. [8 分]阅读程序写结果:
#include < iostream >   
using namespace std;   
int fun(int n)    
{  
    if(n == 1)        
        return 1;      
    if(n == 2)        
        return 2;  
    return fun(n - 2) - fun(n - 1);    
}   
int main()    
{  
    int n;      
    cin >> n;  
    cout << fun(n) << endl;     
    return 0;    
} 

输入:7 输出:( {{ input(4) }} )

  1. [8 分]阅读程序写结果:
#include < iostream >
using namespace std;
int n, m;

int findans(int n, int m) {
    if (n == 0) return m;
    if (m == 0) return n % 3;
    return findans(n - 1, m) - findans(n, m - 1) + findans(n - 1, m - 1);
}

int main(){
    cin >> n >> m;
    cout << findans(n, m) << endl;
    return 0;
}

输入:5 6 输出:( {{ input(5) }} )

  1. [2 分]设A是一个实数的数组,考虑下面的递归算法:
XYZ (A[1..n])
1.  if n= 1 then return A[1]
2.   else
3.           temp ← XYZ (A[l..n-1])
4.         if temp < A[n]
5.         then return temp
6.         else return A[n]

请问算法 XYZ 的输出是什么?( {{ select(6) }} )。

  • A数组的平均
  • A数组的最小值
  • A数组的中值
  • A数组的最大值
  1. [2 分]考虑如下递归算法,则调用solve(7)得到的返回结果为( )。
1	solve(n)
2		if n<=1 return 1
3		else if n>=5 return n*solve(n-2)
4		else return n*solve(n-1)

{{ select(7) }}

  • 105
  • 840
  • 210
  • 420
  1. [2 分]以下对递归方法的描述中,正确的是( {{ select(8) }} )
  • 递归是允许使用多组参数调用函数的编程技术
  • 递归是通过调用自身来求解问题的编程技术
  • 递归是面向对象和数据而不是功能和逻辑的编程语言模型
  • 递归是将用某种高级语言转换为机器代码的编程技术
  1. [2 分]在程序运行过程中,如果递归调用的层数过多,会因为( {{ select(9) }} )引发错误。
  • 系统分配的栈空间溢出
  • 系统分配的堆空间溢出
  • 系统分配的队列空间溢出
  • 系统分配的链表空间溢出