簡體   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