#include <iostream>
#include <cstdlib>
using std:: cin;
using std:: cout;
using std:: endl;
const int N=10;
void readarray(int array[], int N);
int find_num(int array[], int size);
int main ()
{
int array[N];
readarray (array, N);
cout << find_num(array, N);
return EXIT_SUCCESS;
}
void readarray(int array[], int N)
// this function is for inputting an array also using recursion
{
int i=0;
if (i < N)
{
cin >> array[i];
readarray(array+1, N-1);
}
}
int find_num(int array[], int size)
// this function is for checking if a number is in the array that
// was inputted
{
int n;
cin >> n;
if (n==array[0])
return 1;
else if (n!=array[0]){
find_num(array+1, size-1);
return 1;
}
else return 0;
}
显然,程序的重点是只使用递归。我遇到了第二个函数的问题,该函数应该检查是否在数组中找到了数字。如果在数组中找到了数字,那么输出将为1,如果不是那么它应该是0.问题是,它似乎需要更多的输入而且总是输出数字1(无论数字是多少)被发现与否)。我相信我错过了一小步。我也想问一下void函数是否也正确(看起来它对我来说工作正常)。感谢。
答案 0 :(得分:1)
递归函数有两个终止条件。
如果您到达数组的末尾,则表示您找不到号码n
和return 0
。
如果您找到了号码n
return 1
。
如果你没有找到数组的末尾并且找不到数字,请调用你的函数rcursive,得到结果然后返回。
除此之外,您要搜索的号码必须是您的函数find_num
的输入。你不想一次又一次地要求一个号码。
int find_num(int n, int array[], int size)
{
if ( size == 0 )
return 0; // end of array, n was not found
if ( n == array[0] )
return 1; // n was found
return find_num( n, array+1, size-1 ); // test next element of array
}
void readarray(int array[], int N)
{
if ( N > 0 )
{
cin >> array[0];
readarray( array+1, N-1 );
}
}
int main ()
{
int array[N];
readarray( array, N );
int n;
cin >> n;
cout << find_num( n, array, N );
return EXIT_SUCCESS;
}