繁体   English   中英

执行算法递归地寻找较低的数字,非常慢

[英]Execution algorithm recursively seeking lower number, is very slow

嗨,我有以下代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define min(x, y)(x < y)?(x):(y)
#define SIZE 1000

int valormenor(int a[], int n)
{
    if(n == 1)
        return a[0];
    else
        return min(a[0], valormenor(a + 1, n - 1));
}

int main(void)
{
    int arr[SIZE] = {0}, i;
    srand (time (NULL));
    for(i = 0; i < SIZE; i++)
        arr[i] = rand() % SIZE;
    arr[5] = -1;
    printf("%d\n", valormenor(arr, SIZE));

    return 0;
}

关键是不理解,因为找到最小的数会花费太长时间,我的理论是,此递归函数执行不正确,您声称谁呢?

让我们在这里展开min宏:

return min(a[0], valormenor(a + 1, n - 1));

那变成

return (a[0] < valormenor(a + 1, n - 1))?(a[0]):(valormenor(a + 1, n - 1));

如您所见, valormenor被调用两次。 那两个递归调用进行四个递归调用,再进行八个递归调用,依此类推。 这是经典的双重评估错误。

不要使用这样的宏。 他们只是不值得头疼。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM