【问题标题】: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

标签: c recursion minimum


【解决方案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 );

         }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多