电车魔女下载地址:15编写如下函数原型的递归与非递归两种函数equ

来源:百度文库 编辑:中科新闻网 时间:2024/05/06 12:43:07
编写具有如下函数原型的递归与非递归两种函数equ,负责判断数组a与b的前n个元素值是否按下标对应完全相同,是则返回true,否则返回false。并编制主函数对它们进行调用,以验证其正确性。
bool equ(int a[], int b[], int n);
提示:递归函数中可按如下方式来分解并处理问题,先判断最后一个元素是否相同,不同则返false;相同则看n是否等于1,是则返回true,否则进行递归调用(传去实参a、b与 n-1,去判断前n-1个元素的相等性),并返回递归调用的结果(与前n-1个元素的是否相等性相同)。

递归:
bool equ(int a[],int b[],int n)
{
if(n==1)
{
if(a[1]==b[1])
return ture;
else return false;
}
else
{
if(a[n]!=b[n])
return false;
else
{
n=n-1;
equ(a,b,n);
}
}
}
非递归:
bool(int a[],int b[], int n)
{
int i;
for(i=0;i<n;i++)
if(a[i]!=b[i])
return false;
return ture;
}

如下所示:

bool equ(int a[], int b[], int n)
{
if(a[n-1] != b[n-1])
{
return false;
}
if(n == 1)
{
return true;
}
return equ(a, b, n-1);
}

注意,n 是指比较的元素的个数,不是下标。

我也来试试呵呵,上面2位都已经搞定了,我来看看使用C语言最简是什么样子:P,省的大家都说C实现代码很长很郁闷~,真正写代码可别学我这个样子,毕竟代码是给人看的呵呵:
首先递归:
bool equ(int a[], int b[], int n)
{
(1>=n)&&(n=1,a[n-1]==b[n-1])?return true:a[n-1]== b[n-1]?return equ(a,b,n-1):return false;
}

再来看非递归:

bool(int a[],int b[], int n)
{
while(1)0>=n&&a[--n]!=b[--n]?return false:0>=n?return true;
}
-----------------
注:递归里面的1>=n和非递归里面的0>=n是对n的值域的判断,防止别人用负数n对你搞小破坏嘻嘻~~~所以从这上点来看,楼上2位的代码可就危险喽~~

鬼火狼烟写的好精简阿