请教C语言程序

来源:百度知道 编辑:UC知道 时间:2024/06/08 03:21:06
#include "stdio.h"
int f(int a[],int n)
{if (n>=1) return f(a,n-1)+a[n-1];
else return 0;
}
void main()
{
int aa[6]={1,2,3,4,5,6},s;
s=f(aa,6);
printf("%d\n",s);

}
结果是21 不知道是怎么算出来了
看不懂这条f(a,n-1)+a[n-1];
谁帮忙解释一下
最好整条解释下
a[5]=5吗
后面是aa[6]这个数组 跟a[]一样吗 这个a[]数组是怎么算的
第四个朋友即使那样 a[0]+a[1]+a[2]+a[3]+a[4]+a[5]=15啊
试验了下,这程序是计算 数组aa[]里面的和
。。。。第三位朋友的看不懂。

f(a,n-1)+a[n-1]函数 递归调用
返回f(a,5)+a[5]
在调用函数返回f(a,4)+a[4]+a[5]
在调用函数返回f(a,3)+a[3]+a[4]+a[5]
在调用函数返回f(a,2)+a[2]+a[3]+a[4]+a[5]
在调用函数返回f(a,1)+a[1]+a[2]+a[3]+a[4]+a[5]
在调用函数返回f(a,0)+a[0]+a[1]+a[2]+a[3]+a[4]+a[5]
在调用函数返回0(n==0).
jie guo wei 21.

#include <stdio.h>
int f (int *a, int n)
{
if (n >= 1)
return f (a, n - 1) + a[n-1];
else
return 0;
}
这样写也许清楚点,,,
f 就是一个递归函数(尽量不要用这种函数,效率问题)
这个函数的关键是 else return 0; 这句 就是当n小于0时候返回,
然后一层一层都返回 最终把结果返回给 s
6 >= 1 ? 真 继续f();
6 - 1 >= 1 ? 真 继续 f();
。。。。
1 - 1 > = 1? 假 返回 0
并且 f (a, 1 - 1) + a[1-1]
返回给 f (a, 2 - 1) + a[2 - 1]
...........
直道返回main

int f(int a[],int n)
{if (n>=1) return f(a,n-1)+a[n-1];
else return 0;
}
这个是函数,里面进行迭代运算,和课本上的汉诺塔一个性质!

你最好去看下递归函数的基本知识