-7

我有这个 C 递归函数

#include<stdio.h> 
int main(){ 
    int entier; 
    int rlt; 
    printf("\nSaisir un entier : ");  
    scanf("%d",&entier); 
    rlt=loga(5); 
    printf("Le logarithme base 2 de %d est %d:",entier,rlt); 
} 

int loga(int x){ 
    if(x==1){
        return 0;
    } 
    else {
        return (loga(x)=1+loga(x/2));
    } 
}
4

4 回答 4

2

您需要在使用之前声明您的函数。

#include<stdio.h> 

int loga(int x); //declaration

int main(){ 
    //... 
} 

int loga(int x){ 
    if(x==1){return 0;} else {return (loga(x)=1+loga(x/2));} 
}
于 2013-01-01T12:02:33.463 回答
1

您正在分配到non-lvaluein loga(x)=1+loga(x/2)。这是没有意义和无效的。

于 2013-01-01T12:05:12.327 回答
0

递归部分似乎很奇怪。

int loga(int x){ 
    if(x==1){
        return 0;
    } else {
        return (1+loga(x/2));
//             ^^^^^^^^^^^^^ Changed here
    } 
}
于 2013-01-01T12:05:02.420 回答
-1

我认为,以下代码将解决您的问题。

#include<stdio.h> 
int loga(int);

int main()
{ 
    int var; 
    int result; 
    printf("\nPlease enter a value : ");  
    scanf("%d",&var); 
    result=loga(5); 
    printf("The logarithm to the base 2 for %d is %d:",var,result); 
} 

int loga(int x)
    { 
    if(x==1)
        {
        return 0;
        } 
    else
        {
        return (1+loga(x/2));
        } 
      }

此代码应正确执行。

于 2013-01-01T12:17:50.640 回答