我编写了一个小程序,使用动态编程技术来计算数字的阶乘。
#include<stdio.h>
int fact(int n)
{
int f[n],i;
f[0] = 1;
for(i=1;i<=n;i++)
f[i] = i * f[i-1];
return f[n];
}
int main(void)
{
printf("\n Factorial of %d is %d ",5,fact(5));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
记忆方法正确吗?因为,动态编程涉及递归。但是我没有在这里包括它。所以我不确定我的方法。
我浏览了Bjarne Stroustrup的视频,在那里他解释了为什么要避免链接列表.
基本上,当使用指针动态分配内存时,有更多的缓存未命中会降低性能.
但是,如果将相同的事情应用于非线性数据结构(如树和图形),那么同样的事情是否成立?
因为,在树中,我们每个节点都有两个指针,并且指针的随机移动也会导致缓存未命中.
但是,树已被证明比线性数据结构表现更好.当然,树也可以使用数组实现,但同样存在大量的内存消耗.
我的问题是:动态内存分配是否良好?
我编写了一个使用递归来反转字符串的程序.但我得到的输出总是一个空字符串.
我想知道我的逻辑有什么问题?
#include<stdio.h>
void reverse(char a[], int start, int end)
{
char t;
if(start>=end)
return;
else
{
t = a[start]; a[start] = a[end]; a[end] = t;
reverse(a,++start,--end);
}
}
int main(void)
{
char a[] = "hello";
int n = sizeof(a)/sizeof(a[0]);
printf("Given string is : %s ",a);
reverse(a,0,n-1);
printf("Reversed string is : %s ",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:

打印我得到的个人字符,