2013-01-01 25 views
-7

我该C递归函数你能帮我找到这个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)); 
    } 
} 
+10

你听起来好像递归函数是某种疾病。 – jogojapan

+2

将文本翻译成英文也不错。虽然我们都爱说法语,但有些人不会。 – 2013-01-01 12:03:55

+1

欢迎来到堆栈溢出。忽略那些除了英语之外什么都不会读的沙文主义者。问题应该是英文; AFAIAC,代码不一定是。但是,你的问题应该确定问题是什么。例如,它应该显示来自编译器的错误消息,抱怨loga()中第二个'return'语句中的问题。由于您使用C99功能从'main()'返回0,所以在使用它之前,您还应该遵循C99规则并声明'loga()'。 –

回答

0

递归部分看起来很奇怪。

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

我喜欢用'^^^^^^'这种Clang风格的错误标识。 – 2013-01-01 12:14:07

+0

请参阅函数原型没有定义。它也会产生一个错误。请看我的答案,请在下面张贴.. –

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));} 
} 
+0

在术语上有点挑剔 - 它被称为“前向声明” –

+0

thx非常多,有点新东西^ _^ – user1940935

+2

' loga(x)='也行不通。 – TrueBlue

1

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

+0

任何一个有解决方案? – user1940935

+0

@ user1940935:是的,用户[timrau](http://stackoverflow.com/users/718379/timrau)有一个[解决方案](http://stackoverflow.com/a/14110270/15168)。 –

+0

@JonathanLeffler假设这是程序的*真实意图... – SomeWittyUsername

-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)); 
     } 
     } 

此代码应正确执行。

+0

我试图找到日志(10),并且您的程序将答案打印为2. – user93353

+0

@ user93353 - 我只是用SO问题纠正了错误。我没有对他使用的配方做任何改变。 –