实验五 递归

第一题

/*编写递归算法int max(int a[],int left, int right),求数组a[left..right]中的最大数。
*/#include "ArrayIo.h"
/*请将本函数补充完整,并进行测试*/
int max(int a[],int left,int right)
{int l, r, mid;if(left >= right)    return a[left];//设置递归终止条件else{mid = left + right >> 1;l = max(a, left, mid);//不断的划分为子问题r = max(a, mid + 1, right);return l > r ? l :  r;//三目运算符}
}
int main()
{   int a[10];input(a,10);print(a,10);printf("数组的最大数是:%d\n",max(a,0,9));return 0;
}

第二题

/*
请编写一个递归算法函数void partion(int a[], int left, int right),
将数组a[left..right]中的所有奇数调整到表的左边,所有偶数调整到表的右边。
*/
#include "ArrayIo.h"
#define N 10
/*请将本函数补充完整,并进行测试*/
void partion(int a[], int left,int right)
{while(left < right && a[left] % 2 == 1)   left++;//跳转到第一个需要交换的位置while(left < right && a[right] % 2 == 0)   right--;if(left < right){a[left] = a[left] + a[right];//不需要提供额外的空间来存储变量a[right] = a[left] - a[right];a[left] = a[left] - a[right];partion(a, left + 1, right - 1);}
}
int main()
{   int a[N];init(a,N);             /*随机产生N个数*/print(a,N);partion(a,0,N-1);print(a,N);return 0;
}

第三题

/*请编写递归函数void bubbleSort(int a[],int n),对长度为n的数组采用冒泡法进行升序排序。请编写递归函数int binSearch(int a[], int left, int right,int key),采用二分查找法在数组a[left..right]中查找值为key的元素所在的位置,若查找失败函数返回-1。*/#include "ArrayIo.h"
#define N 10
/*请将本函数补充完整,并进行测试*/
void bubbleSort(int a[],int n)
{int i, flag = 0;//flag的作用为判定该数组是否排好序的依据if(n > 0)//递归终止条件{for(i = 0; i < n - 1; i ++){flag = 0;if(a[i] > a[i + 1]){a[i] += a[i + 1];//无需额外的值交换变量a[i + 1] = a[i] - a[i + 1];a[i] -= a[i + 1]; flag = 1;                                          }       }if(flag)   return bubbleSort(a, n - 1);//如果flag == 0 表示这个数组已经排好序了}return ;
}
int binSearch(int a[], int left,int right,int key)
{int mid;if(left > right)    return -1;//设置递归结束条件else{mid = left + right >> 1;if(a[mid] > key) return binSearch(a, left, mid - 1, key);//二分返回结果else if(a[mid] == key)   return mid;else return binSearch(a, mid + 1, right, key);}}
int main()
{   int x,pos,a[N];init(a,N);bubbleSort(a,N);print(a,N);printf("请输入要查找的数:\n");scanf("%d",&x);pos=binSearch(a,0,N-1,x);if (pos!=-1) printf("a[%d]=%d\n",pos,x);else printf("Not found!\n");return 0;
}

第四题

/*
已知带头结点的单链表结构定义同实验3,假设链表中所有结点值均不相同,
请编写一个递归函数linklist max(linklist head),返回表中最大数所在的结点地址,若链表为空,返回NULL。
*/#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
linklist max(linklist head)
{{linklist r;if (head->next == NULL)//递归终止条件return NULL;elseif (head->next->next == NULL)//对于递归结果进行处理return head->next;else{r = max(head->next);return head->next->info > r->info ? head->next : r;}
}
}
int main()
{   linklist head,p;head=creatbyqueue();print(head);p=max(head);if (p)printf("max=%d\n",p->info);elseprintf("链表为空\n");return 0;
}

阿伟,别打电动了,休息一下好不好相关推荐

  1. 外卖匹配系统_困扰外卖骑手的“系统” ,无人能置身事外

    文 | 周天财经 周天财经 原创出品 这几天,一篇刻画外卖骑手在智能算法下生存现状的故事特稿得到了广泛传播.它生动地描绘了外卖小哥的生存图景,同时也讨论了算法,抑或者说,技术对人的异化. 在这幅图景及 ...

  2. 这声音酥了!萌妹程序员鼓励师24小时在线陪你写代码,给我吹爆这个VSCode插件...

    开源最前线(ID:OpenSourceTop) 猿妹综合整理 项目地址:https://github.com/SaekiRaku/vscode-rainbow-fart 最近,Github上有一个名为 ...

  3. 为什么每天感觉没精神

    有些朋友会总是感觉没有精神,整天困得睁不开眼,干什么都没有劲儿,休息又睡不好,该怎么办呢? 早睡早起.虽然都是每天睡8小时,但是早睡早起的人明显比晚睡晚起的人充满了正能量.要相信大自然的力量,自然赋予 ...

  4. vscode卸载background插件_萌妹程序员鼓励师24小时在线陪你写代码,给我吹爆这个VSCode插件...

    开源最前线(ID:OpenSourceTop) 猿妹综合整理 项目地址:https://github.com/SaekiRaku/vscode-rainbow-fart 最近,Github上有一个名为 ...

  5. 程序员谈网络改变我们的生活

     前出塞的程序员今天写个网络改变生活的文章,大家共勉!二十一世纪,网络已经成为了人们生活中必不可少的东西了,没有了网络,我们的衣.食.住.行都有可能陷入全面瘫痪.可见网络在我们的生活中起到了多大的 ...

  6. 【日本語勉強】日本語四級文法突撃(11~20)

    11.(動詞第一連用形)ませんか? 表示建议或劝诱,相当于"......吗?" 例文: 少しや休憩しませんか?(稍微休息一下好不好?) 単語: 少し:すこし 休憩:きゅうけい ☆★ ...

  7. 比尔盖茨:有种事你永远不能等待!

    一日,某记者采访世界首富比尔·盖茨,问他:最不能等待的事情是什么?他回答说:世界上最不能等待的事情莫过于孝敬父母! 他的回答突然触痛了我的心灵.一个视时间为金钱的商人,没有回答是"商机&qu ...

  8. 全球首家机器人酒店“大裁员”!别了,人工智障

    [CSDN 编者按]早有 Echo 音响午夜异常启动的"灵异事件",近有小米 AIoT 开发者大会上"答非所问"的小爱同学,我们似乎三五不时就能在各种报道中看到 ...

  9. 一枚普通前端平淡无奇的一年 - 2021年终总结

    写在开头 hi,大家好我是蛙人. 时间转瞬即逝,2021年只剩下没几天了,即将迎来新的一年,新的一年到来意味着将面临新的机遇和挑战,新的一年要加油哦. 这里先提前祝大家happy new year ! ...

最新文章

  1. Java 时间和日期类型的 Hibernate 映射
  2. 004_Maven构建生命周期
  3. 电气期刊论文实现:考虑爬坡约束和输电损耗的经济调度【有代码】
  4. sqlserver2008数据库自动备份的sql脚本及使用bat命令执行脚本
  5. 『ACM-数据结构』信息竞赛进阶指南--线段树
  6. jpanel把原本内容覆盖掉_A5:APP关键词覆盖你该了解哪些
  7. netstat(win)
  8. Ubuntu apt-get方式安装Subversion
  9. 表分析oracle的作用,Oracle中分析表的作用
  10. Hive常见的存储格式的区别与应用场景
  11. 狂人传记:戎马半生 何以安家
  12. jQuery各种选择器总结
  13. Hadoop 3.x 的组成 完整使用 (月薪过万 第三章)
  14. 批量替换角标,为角标添加中括号
  15. 千呼万唤始出来——DataV私有部署功能
  16. 小程序转uni-app——引入组件显示问题
  17. linux查询主机信息命令,用来获取Linux主机信息的5个常用命令
  18. 最近用到ListView需要几人人物,于是整理了下以前看的玄幻小说人名,时间不够,只整理了几本,凑合用着 1》诛仙
  19. pdf转ppt在线转换
  20. 关于IE浏览器的ActiveX的一些使用(JavaScript)

热门文章

  1. 《Linux内核情景分析》阅读笔记
  2. 图片大小自适应垂直居中的方法
  3. html微信非法昵称代码,微信撤回消息并亲了你一下改名提示非法字符解决办法...
  4. SALOME源码分析:GUI模块
  5. Linux 如何在 vi 里搜索关键字
  6. psychopy_免费和有用的软件– PsychoPy
  7. android usb触摸屏idc实现触摸唤醒
  8. 股票软件开发总体方案
  9. js之焦点图轮播特效
  10. 中断函数实现按键控制LED灯亮灭