关于有些算法的困惑

mortimer7866 2016-03-09 07:50:52
有时候看一个算法特别是递归算法看了好长时间终于看懂了,这里举个例子递归写出的整数划分算法,最下面给出代码,但是还是觉得怪怪的,自己并没有掌握这个算法的精髓,脑海中并没有这个算法的完整思路,不想有些我掌握的算法,比如dijkstra,prim算法,我知道这些算法的思想,可以凭思想自己写出代码来,但是这个递归划分算法我只能达到看代码得出坐着的思路,不知道这个代码作者是是怎么写出来的,不知道作者是怎么把这个想出来的,不像dijkstra这些算法看懂了理解了“哦,这种思想这个思路的确可以得到这个结果”,我觉得或许是我的境界不够,或许写出这种算法的人本身就是算法高手,我不是那个境界所以想不出来这样的思路从而写出这个算法代码,像这个划分算法或许我写一段时间熟悉了我会记得这个算法但能不能达到理解思想最终根据思想写出代码,而不是记住这个代码行走的步骤,或许这就跟数学题一样,有的题就是想不出来为什么这样做,但别人就能想出来!其实我基本知道还是自己的算法学的还不行的原因,就是想把这种想法说出来!

#include <stdio.h> 
int a[100] = { 0 };
void shuchu(int m)
{
int i;
for (i = 0; i <= m - 1; i++)
{
printf("%d", a[i]);
if (i != m - 1) printf("+");
}
printf("\n");
}

void fenjie(int n, int m)
{
int i;
if (n == 0) shuchu(m);
else
for (i = n; i >= 1; i--)
if (m == 0 || i <= a[m - 1])
{
a[m] = i;
fenjie(n - i, m + 1);
}
}

void sumdivnum(int n,int m)
{
if (n <1 || m <1) return 0;
else if (n==1||m==1) return 1;
else if (n < m) return sumdivnum(n, n);
else if()
}

void main(void)
{
int n, m = 0;
printf("please input a number(0<n<100): ");
scanf("%d", &n);
fenjie(n, m);
}

...全文
171 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mortimer7866 2016-03-14
  • 打赏
  • 举报
回复
引用 1 楼 qq_34026771 的回复:
知道买油翁吧,有句话叫唯手熟尔,编程也一样,写的多了,看得多了,就能摸到他的思想,进而掌握甚至创新,加油!!!
我也基本上想通了,为什么说学习编程数学很重要,就像数学中的难题,有时候某些题目别人能想出来的自己就是想不出来,就如这个算法一般,想不出来这个算法,就是不知道为什么别人这样想,怎么样得到的这个思路能把这个算法写出来,其实说数学号重要的是是思想,哈哈,自嘲一下,还是算法水平不够,以后多加油
mortimer7866 2016-03-14
  • 打赏
  • 举报
回复
引用 1 楼 qq_34026771 的回复:
知道买油翁吧,有句话叫唯手熟尔,编程也一样,写的多了,看得多了,就能摸到他的思想,进而掌握甚至创新,加油!!!
嗯嗯,谢谢你
mortimer7866 2016-03-14
  • 打赏
  • 举报
回复
引用 2 楼 kulouzuan 的回复:
我也是这样,估计和高中有些难题一样 都是有套路的,我们估计是记住这些固有的套路 熟了之后再去灵活运用。
嗯,是的,就像你说的这些难题,只是记住了套路,记住作者写出的这个算法的让数据的变化过程,而不是根据像已经理解,脑海中有深刻印象,已经掌握的算法来根据思路写代码,谢谢你,这个套路我觉得你说的应该是数学,这里用好像不太准确,数学做题的话某种类型的有某种类型的套路,但是算法千变万化有很多个问题需要去想出不同的算法,当然有的类型想象的稍微修改一下已知的算法就可以,可能你说的某种意义上也是对的!
张唯 2016-03-10
  • 打赏
  • 举报
回复
我也是这样,估计和高中有些难题一样 都是有套路的,我们估计是记住这些固有的套路 熟了之后再去灵活运用。
赵4老师 2016-03-10
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
hello_laffey 2016-03-09
  • 打赏
  • 举报
回复
知道买油翁吧,有句话叫唯手熟尔,编程也一样,写的多了,看得多了,就能摸到他的思想,进而掌握甚至创新,加油!!!

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧