p是个指针数组,可以看做是二维数组
p[3][2]就是第3行第2列的值
那么既然p的定义是p[4],就是说它把数组a切成了4行
123
456
789
10,11,12
第3行第2列不是12吗
P[3][2]首先找到P[3], P[3]对应a[9]的地址,应该p[3][0]对应a[9], p[3][2]对应a[11],a[11]的现在是12,因此结果是12。
为了更好的理解迭代我们来看例题:求第n个斐波那契数列
思路是:如果是第三个及以上的斐波那契数就递归,他前两个数字之和。
//递归法求斐波那契数列
#include<stdio.h>
int Fib(int n)
{
if (n == 0)
{
return 0;
}
if (n <= 2)
{
return 1;
}
else
{
return Fib(n - 1) + Fib(n - 2);
}
}
int main()
{
int n = 0;
scanf("%d", &n);
int fibnum = Fib(n);
printf("%d", fibnum);
return 0;
}
要注意,在不考虑溢出的情况下我们计算第40个斐波那契数列,程序就需要等待好一会才能计算完毕,这效率显然不行,我们下面来看迭代法。
//迭代法求斐波那契数列
#include<stdio.h>
int main()
{
int n = 0;
int a = 1;
int b = 1;
int c = 1;
scanf("%d", &n);
if (n == 0)
{
printf("0\n");
}
else if (n <= 2)
{
printf("%d", c);
}
else
{
while (n>2)
{
c = a + b;
a = b;
b = c;
n--;
}
printf("%d", c);
}
return 0;
}