如何在不使用数组的情况下显示Aitken’s array?
Aitken的数组是一个按行读取的数字三角形{a**n,k,n ≥ 0,0 ≤ k ≤ n},定义为 a0,0=1,a**n,0 = a**n − 1,n−1,a**n,k = a**n,k−1 + a**n−1,k−1。前几行是:
1
1 2
2 3 5
5 7 10 15
15 20 27 37 52
我试过这个:
#include <stdio.h>
int
main()
{
int i,
j,
current = 1,
next = 1,
temp;
printf("%d\n", current);
for (i = 2; i <= 5; i++) {
temp = current + next;
printf("%d ", next);
for (j = 3; j <= i; j++) {
current = next;
next = temp;
temp = current + next;
printf("%d ", next);
}
printf("\n");
}
return 0;
}
2条答案
按热度按时间lx0bsm1f1#
下面,
out
是输出行。dif
是[给定]输出行元素之间的差。请注意,输出行3的差分行与行2的输出行相同(例如
1 2
)。因此,行X的差值是行X-1的输出行。
yws3nbqq2#
因此,模式可以由以下函数定义,其中
r
是(从0开始的)行,i
是该行内的偏移量。这可以很容易地实现为递归函数,其调用如下:
因为这听起来像是家庭作业,所以我将把
f
的实现留给您。一个关于效率的题外话。使用递归(没有memoization)是非常低效的。一个特别高效的解决方案需要使用大小为
n
的数组,但我们在这里特别排除使用它。