首页 > 用户发贴区 > 编程问题提问区 > 一简单我却不明白的C问题
2009
01-04

一简单我却不明白的C问题

#include “stdio.h”
int fun(int *x,int n)
{if(n==0) return x[0];
else return x[0]+fun(x+1,n-1);
}
void main()
{int a[]={1,2,3,4,5,6,7};
printf(“%d\n”,fun(a,3));
}
帮忙分析一下结果为什么会是10?


fun(a,3)           x[0]+fun(a[1],2)
fun(a[1],2)       x[0]+fun(a[2],1)
fun(a[2],1)       x[0]+fun(a[3],0)
fun(a[3],0)       x[0]
大家看一下是这样推的吗


一简单我却不明白的C问题》有 3 条评论

  1. yixianliu 说:

    一个递归的问题!!

    主要在   return x[0]+fun(x+1,n-1);

  2. 尹恒科技 说:

    我知道是为什么了。

    你的最后一步出错了。最后你的意思是输出a[0],其实不是。

    if(n==0) return(x[0]);其中x[0]指的是*(x+0)

    而你带入的是a[3],所以最后的结果是*(a+3+0),即a[3]

  3. qianmo717 说:

    fun(a,3)           x[0]+fun(a[1],2) /*这时x[0]等于a[0]也就是数字1*/
    fun(a[1],2)       x[0]+fun(a[2],1) /*这时x[0]等于a[1]也就是数字2*/
    fun(a[2],1)       x[0]+fun(a[3],0) /*这时x[0]等于a[2]也就是数字3*/

    fun(a[3],0)       x[0]                   /*这时x[0]等于a[3]也就是数字4*/

留下一个回复