知识大全 数据结构考研分类复习真题 第三章 答案[27]

Posted

篇首语:聪明在于勤奋,天才在于积累。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第三章 答案[27]相关的知识,希望对你有一定的参考价值。

   int MaxValue (int a[] int n)//设整数序列存于数组a中 共有n个 本算法求解其最大值   if (n== ) max=a[ ];  else if a[n]>MaxValue(a n ) max=a[n];  else max=MaxValue(a n );  return(max);  

   本题与上题类似 只是这里是同时求n个数中的最大值和最小值的递归算法

  int MinMaxValue(int A[] int n int *max int *min)//一维数组A中存放有n个整型数 本算法递归的求出其中的最小数   if (n> )  if(*max<A[n]) *max=A[n];  if(*min>A[n]) *min=A[n];  MinMaxValue(A n max min);  //算法结束

  [算法讨论]调用本算法的格式是MinMaxValue(arr n &max &min);其中 arr是具有n个整数的一维数组 max= 是最大数的初值 min= 是最小数的初值

   [题目分析] 求两个正整数m和n的最大公因子 本题叙述的运算方法叫辗转相除法 也称欧几里德定理 其函数定义为

  gcd(m n)=  int gcd (int m n)//求正整数m和n的最大公因子的递归算法  if(m<n) return(gcd(n m)) //若m<n 则m和n互换  if(n== ) return(m); else return(gcd(n m%n));  //算法结束  使用栈 消除递归的非递归算法如下   int gcd(int m n)  int s[max][ ];//s是栈 容量max足够大  top= ; s[top][ ]=m; s[top][ ]=n;  while (s[top][ ]!= )  if (s[top][ ]<s[top][ ])//若m<n 则交换两数  t=s[top][ ]; s[top][ ]=s[top][ ]; s[top][ ]=t;  elset=s[top][ ]%s[top][ ]; top++; s[top][ ]=s[top ][ ]; s[top][ ]=t;   return(s[top][ ]);  //算法结束  由于是尾递归 可以不使用栈 其非递归算法如下  int gcd (int m n)  //求正整数m和n的最大公因子  if (m<n)t=m;m=n;n=t;// 若m<n 则m和n互换  while (n!= ) t=m; m=n; n=t%n;  return(m);   //算法结束

cha138/Article/program/sjjg/201311/22695

相关参考