#include<stdio.h>
voidmain()
{
inti;
intnumber=1;
intsum=0;
for(i=0;i<50;i++)
{
number+=i;
sum+=number;
}
printf("%d\n",sum);
}
不知道我这样写是不是跨度大了点,但是我不准备详细解释了,很多东西需要你去认真分析的,所以很多东西如果不懂,自己想清楚比别人解释的效果会更好,因为别人讲只能让你理解,如果你自己去想,你就在理解的同时学会了思考 。
这个代码写出来,不要继续看下去,先自己尝试着把这个题目用递归做一下看看自己能不能写出来,当然,递归并不是那么轻松就能使用的,有时候也是需要去细心设计的 。如果做出来了,对比一下下边的代码,如果没有写出来,建议认真分析后边的代码,然后最好是能完全掌握,能自己随时把这行代码写出来:
#include<stdio.h>
intadd(intn,intnum,inti)
{
num+=i;
if(i>=n-1)
{
returnnum;
}
else
{
returnnum+add(n,num,i+1);
}
}
voidmain()
{
intsum;
sum=add(50,1,0);/*50表示前50象项*/
printf("%d\n",sum);
}
当然这个代码中的n只是一个参考变量,如果把if(i>=n-1)中的n该成50,那么就不需要这个n了,函数两个参数就可以了,这样写是为了修改方便 。
20:28|添加评论|固定链接|引用通告(0)|记录它|计算机与Internet
程序算法4-递归2-递归的魅力
两天没有再写下去,因为毕竟有时候会有点心情问题,有时候觉得心情不好,一下子什么东西都想不起来了,很多时候写一些东西是需要状态的,一旦状态有了,想的东西才能顺利的写出来,虽然有些东西写出来在别人看来很垃圾,但是起码自己觉得还是相当满意的,我写这个本来就没有多少技术含量,只是想给初学程序的人一些指引,加快他们对程序的领悟!
好了,言归正传,继续上次递归的讨论,看看递归的魅力所在 。
有这样一个问题,说一个猴子和一堆苹果,猴子一天吃一半,然后再吃一个,10天后剩下一个了,也就是说吃了10次,剩下1个了 。问原来一共有多少苹果 。
当然我们的目的不是求出苹果的数量,而是寻求一种解决问题的方法,这个问题一出来,通常对程序掌握深度不一样的朋友对这个题会有不同的认识,首先介绍一种解决方法,这种人脑袋还是比较聪明的,思路非常的明确,也有可能语言工具掌握的也不错,代码写出来非常准确,先看一下代码再做评价吧:
#include<stdio.h>
voidmain()
{
intday=10;
intapple;
inti,j;
for(i=1;;i++)
{
apple=i;
for(j=0;j<day;j++)
{
if(apple%2==0&&apple>0)
{
apple/=2;
apple--;
}
else
{
break;
}
}
if(j==day&&apple==1)
{
【递归算法有何特点】printf("%d\n",i);
return;
}
}
}
程序的大概思路很明确,简单介绍一下,这种写法就是从一个苹果开始算起,for(i=1;;i++)的作用就是改变苹果的数量,如果1个符合条件,那就试试2个,然后3个、4个一直到适合为止,里边的for循环就是把每一次取得的苹果的数目进行计算,如果每次都能顺利的被2整除(也就是说每次都能保证猴子能正好吃一半),然后再减一一直到最后,如果最后苹果剩下是一个而且天数正好是10天,那么就输出一下苹果的数目,整个程序退出,如果看不明白的没关系,这个写法非常的不适用,我们叫写出这种算法的人傻X,虽然这种人脑袋也挺聪明,能写出一些新鲜的写法,但是又脏又臭,代码既不简练又不高效 。
猜你喜欢
- 日本所处的半球位置,纬度位置和海陆位置有何特点
- 小满养生有何误区
- 什么是相对静止?承认相对静止来自有何意义
- 向量的计算法则
- 山药蛋派、荷花淀派、茶子花派各有何主要特点?
- SMC材料有何优点?
- 柯尔鸭是什么品种 与其它鸭子有何区别
- 共进晚餐是什么意思 共进晚餐有何意思
- 关于曾经拥有的句子
- 什么是经络学?包括哪些内容?在中医养生学有何作用?
