实验一:循环与递归算法的应用
【实验目的】
1.掌握循环、递归算法的基本思想、技巧和效率分析方法。
2.熟练掌握循环和递归的设计要点,清楚循环和递归的异同。
3.学会利用循环、递归算法解决实际问题。
【实验内容】
1. 问题描述:
(1)题目一:打印图形
编程打印如下图所示的N阶方阵。
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
(2)题目二:计算前n项和
根据参数n,计算1+2+……+n。
要求:用循环和递归分别实现
(3)题目三:回文判断
判断s字符串是否为“回文”的递归程序。
2. 数据输入:个人设定,由键盘输入。
3. 要求:
(1)上述题目一、二必做,题目三选做;
(2)独立完成实验及实验报告。
【具体实现过程】
题目一:
【算法分析】
通过两个for循环控制数字的输出。
【实现代码】
#include<stdio.h>
int main()
{
int i,j,k,n,l,middle,temp;
printf("请输入n的大小\n");
scanf("%d",&n);
k = 1;
temp = 0;
middle = 0;
for(i=1;i<=n;i++)
{
middle = i+1;
k += temp;
printf("%d ",k);
l = k;
for(j=n;j>0;j--)
{
if(j==1)
printf("\n");
else
{
l += middle;
printf("%d ",l);
middle++;
}
}
temp++;
n--;
}
return 0;
}
题目二:
【算法分析】
定义一个sum函数求和,把求出的新值赋给sum,最后求得的值即为前n项和。
【实现代码】
递归
#include "stdio.h"
int fun(int num)
{
int sum;
if( num==1)
sum=1;
else
sum=num+fun(num-1);
return sum;
}
void main()
{
int n,s;
printf("n=");
scanf("%d",&n);
s=fun(n);
printf("s=%d\n",s);
}
循环
#include<stdio.h>
void main()
{
int sum=0;
int n,i=1;
printf("n=");
scanf("%d",&n);
while(i<=n)
{
sum+=i*i;
i++;
}
printf("%d",sum);
}
【实验心得】
通过本实验掌握循环、递归算法的基本思想、技巧和效率分析方法。
熟练掌握循环和递归的设计要点,清楚循环和递归的异同。
学会利用循环、递归算法解决实际问题。
让大问题变为小问题,提高效率。