递归就是用函数直接调用自己或通过一系列调用语句间接调用自己来描述问题和解决问题的方法。
递归通常用来解决=构成原问题的子问题与原问题在结构上相似,可以用类似的方法解决的问题。递归 2次调用整个问题的解决,可以分为两部分:第一部分是一些特殊情况,有直接的解法;第二部分与原问题相似,但比原问题的规模小。
递归是把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的问题,直至每个小问题都可以直接解决。
递归有两个基本要素(1)边界条件:确定递归到何时终止。递归 2次调用(2)递归模式:大问题是如何分解为小问题的,也称为递归体。递归函数只有具备了这两个要素,才能在有限次计算后得出结果
在递归函数中,调用函数和被调用函数是同一个函数,要注意递归函数的调用层次,如果把调用递归函数的主函数称为第0层,进入函数后,首次递归调用自身称为第1层调用;从第i层递归调用自身称为第i+1层。反之,退出第i+1层调用应该返回第i层。
递归函数的内部执行过程。一个递归函数的调用过程类似于多个函数的嵌套的调用,只不过调用函数和被调用函数是同一个函数。
线性表用顺序实现。请填空写一个求线性表L 中所有奇数之和的算法。
例如:
L=(1,2,3,4,5) 其和为 9
#include<stdio.h>
#define N 10
typedef struct sqlist
{
int data[N];
int last;
}LIST;
int Total(List list)
{
return sum;
}
void Show(LIST list)
{
int i;
for(i=0;i<=list.last;i++)
printf("%3d", list.data[i]);
printf("\n");
}
int main()
{
LIST list;
int i,sum;
for(i=0;i<=5;i++)
list.data[i]=i;
list.last=5;
Show(list);
sum=Total(list);
printf("sum=%3d\n",sum);
return 0;
}
答案

int sum=0;
for(int i=0;i<=list.last;i++)
if(list.data[i]%2)
sum+=list.data[i];
程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。
函数fun的功能是将形参a所指结构体变量s中的数据进行修改,并把a中地址作为函数值返回主函数,在主函数中输出修改后的数据。
例如:a所指变量s中的学号、姓名、和三门课的成绩依次是:
10001、" ZhangSan "、95、80、88,
修改后输出t中的数据应为:10002、"LiSi "、96、81、89。
#include<stdio.h>
#include<string.h>
struct student {
long sno;
char name[10];
float score[3];
};
______2__________ Modif(struct student *p)
{
int i;
p->sno = 10002;
strcpy(p->name, "LiSi");
for (i=0; i<3; i++)
______3_______++;
return _____4________;
}
void main()
{
struct student s={10001,"ZhangSan", 95, 80, 88}, *t;
int i;
printf("\n\nThe original data :\n");
printf("\nNo: %ld Name: %s\nScores: ",s.sno, s.name);
for (i=0; i<3; i++)
printf("%6.2f ", ___1____);
printf("\n");
t = Modif(&s);
printf("\nThe data after modified :\n");
printf("\nNo: %ld Name: %s\nScores: ",t->sno, t->name);
for (i=0; i<3; i++)
printf("%6.2f ", t->score[i]);
return 0;
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-55666-2.html
嗯嗯
他们要来就来吧