拜托,你能帮我解决这个递归函数吗?

时间:2014-11-09 17:38:24

标签: c recursion

#include <stdio.h> 
int  fun (int x)
 {
      if (x<1)
        return(1);
      else
        printf("%d %d \n", x, fun(x-1));
 }
int main()
 { int x,y;
   x = 5;
   y = fun(x);
   printf("\n x = %d f(x) = %d \n", x, y);
   return 0;
  }

该程序包含一个计算某些数字的递归函数。输出中有些东西我无法理解。 以下链接有输出屏幕截图:

https://onedrive.live.com/redir?resid=BE4862D617298D2C!886&authkey=!AA03bF8dQ5W4S9Y&v=3&ithint=photo%2cpng

为什么右列(红色圆圈)如图所示?我认为这个专栏将是全部而不是那个。

2 个答案:

答案 0 :(得分:2)

因为当x&gt; = 1时函数fun没有返回值。

5是printf("%d %d \n", x, fun(x-1));的返回值,因为它输出了5个字符。

答案 1 :(得分:0)

如果x>=1没有返回任何内容,则在执行到达函数末尾时会导致未定义的行为。这意味着价值可能是任何东西,你偶然得到5个。

  

6.9.1。 P12:

     

如果到达终止函数的},则使用函数调用的值   调用者,行为未定义。

在您的示例中使用返回值。

int fun(int x)
{
    if (x<1)
        return(1);
    else
        printf("%d %d \n", x, fun(x-1));

    return x ;//just return something
}

您可能希望返回与您的功能相关的内容。