请问一道查找数字的递归有关问题
请教一道查找数字的递归问题
数组{1,2,3,4,5,6}
查找指定数字
一次依次查找 1 2 3 4 5 6 没有
二次查找 1+2 1+3 1+4 1+5 1+6
2+3 2+4 ……
三次查找 1+2+3 1+2+4
若1+2+3+4+5+6 没有 返回null
find 4 [1] 4
find 7 [1] 1
[2] 6
find 13 [1] 2
[2] 5
[3] 6
这个算法可以用递归求解么?求教,谢谢!
------解决方案--------------------
时间复杂度O(m*n),空间复杂度O(n)
数组{1,2,3,4,5,6}
查找指定数字
一次依次查找 1 2 3 4 5 6 没有
二次查找 1+2 1+3 1+4 1+5 1+6
2+3 2+4 ……
三次查找 1+2+3 1+2+4
若1+2+3+4+5+6 没有 返回null
find 4 [1] 4
find 7 [1] 1
[2] 6
find 13 [1] 2
[2] 5
[3] 6
这个算法可以用递归求解么?求教,谢谢!
------解决方案--------------------
#include <stdio.h>
int search_digit(int *digit, int n, int *matrix, int m)
{
int i, j;
static int nr = 0;
if(nr == n) //第归深度
return 0;
//在矩阵matrix中搜索指定数字,然后更新对应数字
for(i = nr; i < n; ++i)
{
printf("%d\n", digit[i]);
for(j = 0; j < m; ++j)
if(digit[i] == matrix[j])
return j;
digit[i] += nr + 1;
}
++nr;
// printf("nr:%d\n", nr);
return search_digit(digit, n, matrix, m);
}
int main(int argc, char *argv[])
{
int digit[] = {1, 2, 3};
int matrix[] = {8, 7 , 6};
printf("%d\n", search_digit(digit, 3, matrix, 3));
return 0;
}
时间复杂度O(m*n),空间复杂度O(n)