2014-08-28 34 views
-5

请原谅我问这个,因为我知道我要给你的代码是错误的。作为新手,我无法找到错误。请帮助我纠正问题并提供解决方案。我很抱歉打扰这个简单的问题。明天是我的C,所以我有点绝望。 :(这里c有什么故障?

问:?什么将是该程序的输出

首先让我告诉你我是怎么找到的代码第一:

#include<stdio.h> 

    int funct l(int n){ 
    if (n>3) 
     return int funct(n-3))); 

    } 

    main() { 
    int n= 10; 
    printf("%d", funct l (n)); 

    } 

然后我想我会纠正它,然后我清理了代码,据我然后代码来到这个:。

#include<stdio.h> 

int funct(int n){ 
    if (n>3){ 
     return funct(n-3); 
    } 
} 

main() { 
    int n= 10; 
    printf("%d", funct(n)); 



} 

仍然没有给出合适的回答(虽然我不知道它会显示)它要么1或2,并且处理返回1(0 * 1)显示在第th最后一行。

请帮我一把!

+3

'func'不返回。停止做你正在做的事,并学习如何使用你的编译器:*正确运行的任何*编译器会给你一个响亮而清晰的警告,告诉你这种明显的错误。你不需要堆栈溢出。你只需要听你的编译器。 – 2014-08-28 21:04:32

+2

我建议将编译器的警告级别调高到最大。大多数编译器可以在函数没有返回值时自动发出警告,这可以帮助您在这里发现错误。 – templatetypedef 2014-08-28 21:05:29

+1

提示:如果'n' <= 3,函数应该返回什么? – 2014-08-28 21:06:30

回答

1

您的funct函数并不总是返回一个值。这意味着它可以返回任何东西。试试这个:

int funct(int n) { 
    if (n > 3) 
     return funct(n - 3); 
    return n; 
} 

这里是调用堆栈当n = 10

funct(n = 10) 
    funct(n = 7) 
     funct(n = 4) 
      funct(n = 1) 
       return 1 
      return 1 
     return 1 
    return 1 

这里是调用堆栈当n = 11

funct(n = 11) 
    funct(n = 8) 
     funct(n = 5) 
      funct(n = 2) 
       return 2 
      return 2 
     return 2 
    return 2 
+0

感谢您的快速回答。但在这样的代码: ' 的#include INT阶乘(INT N) { 如果(N> 1) 返回N *阶乘(N-1); } int main() { int n; printf(“输入正整数:”); 的scanf( “%d”,&n); 的printf( “%d =%LD的阶乘”,N,阶乘(N)); 返回0; }' 在函数的减速返回类型是函数。我在这里错过了什么? – user3663862 2014-08-28 21:17:05

+2

@ user3663862这是一个与此处讨论的问题不同的问题,不太可能得到回答。接受cabellicar123的答案,如果它解决了你所问的问题,请问你的第二个问题是一个新的独立问题,如果它与此相关,请参考链接。 – 2014-08-28 21:26:15

+0

通过做@ cabellicat123告诉我做: 的#include INT本功能(INT N){ 如果(N <3){ 回本功能(N-3); return n; } } main(){ int n = 10; 012fprintf(“%d”,funct(n)); return 0; } 输出是10.这是答案什么程序应该给? – user3663862 2014-08-28 21:32:16