使用递归函数找到最小值

Posted

技术标签:

【中文标题】使用递归函数找到最小值【英文标题】:Finding minimum with a recursive function 【发布时间】:2015-09-03 18:34:05 【问题描述】:

无论输入什么,结果始终为 0。 这是为什么 ?

#include <stdio.h>
#include <conio.h>

int rekursiv( int v[], int i, int n, int *min );

int main( void )

    int v[ 100 ];
    int n, i, min;

    printf( "Shkruanni n: " );
    scanf( "%d", &n );
    printf( "Shkruani elementet e vektorit.\n" );
    for( i = 0; i < n; i++ )
         scanf( "%d", &v[ i ] );

         //end for
    min = v[ 0 ];
    i = 1;
    printf( "Minimumi eshte %d.", rekursiv( v, i, n, &min ) );

    getche();
    return 0;
//end main

int rekursiv( int v[], int i, int n, int *min )

    if( i == n - 1 ) 
        return *min;
    //end if
    else 
        if( *min < v[ i ] ) 
            *min = v[ i ];
        //end if
        rekursiv( v, i + 1, n, min );
    //end else

//end rekursiv

【问题讨论】:

也许你应该包含一个简短的代码描述 #include stdio.h #include conio.h? &lt;&gt; 去哪儿了? 为什么要递归?这是矫枉过正。 因为这是家庭作业:D 【参考方案1】:

您应该在打开警告的情况下进行编译。 rekursiv 并不总是返回值。

改变

rekursiv( v, i + 1, n, min );

return rekursiv( v, i + 1, n, min );

【讨论】:

我很确定 msvc 和 gcc 都会在默认设置下给出警告。我会假设他只是没有阅读它们,因为每个人都知道警告是正常的。【参考方案2】:

在函数 (int rekursiv( int v[], int i, int n, int *min ) ) 中,必须返回整数,因此您的最后一个条件不会返回任何内容。您应该检查最后一个条件 ELSE

else 
         if( *min < v[ i ] )
             *min = v[ i ];

             //end if
         rekursiv( v, i + 1, n, min );

         

【讨论】:

以上是关于使用递归函数找到最小值的主要内容,如果未能解决你的问题,请参考以下文章

使用递归js在树状对象中查找最小值和最大值

使用递归函数查找数组的最小数量

在递归二叉树函数中返回元组时遇到问题

数组中最小值的索引; “递归”

列表的最小值和最大值(不使用 min/max 函数)

递归 JavaScript 函数正在丢失返回值