递归的十个生活实例,生活中的递归例子

http://www.itjxue.com  2023-01-06 09:07  来源:未知  点击次数: 

生活中计算思维应用的典型案例五则。

生活中的计算,包括等分除法和包含除法。

把12个钢镚平均分成4份,每份得3个钢镚,这样把一些物品平均分成几份,求每份是多少,可以用除法表示。

把一些物品按照每几个一份分,求能分成多少份,也可以用除法表示。这种除法就是包含除法。

希望我能帮助你解疑释惑。

递归思想在生活中的应用

首先,在相同的材料制成的管,该循环具有最大的面积。几何告诉我们,这一次的面积远比占地的形状的任何其它区域更大,如果存在的材料制成的最重要的事情,希望当然,体积相同量,是最合适的轮。水管,煤气管等,是模仿这一自然现象。

其次,圆柱形,最大支持力量。此外

,以防止外力破坏。我们知道,如果植物的茎方形,扁平或其它角度,更容易受到外部冲击的伤害。圆是不同的,当风和打击乐,不管风卷沙尘杂物从哪个方向,沿切线方向很容易被扫圆面,受影响的只是很小的一部分。

因此,杆的形状,也能适应的植物结果自然环境。

例如,树木;从几何理解,周看起来在同一时间,面积的圆的面积大于任何其它形状。所以圆树干,树枝在分配管和屏幕比多的数量,因此输送水分和养分一轮持续大等形状,更有利于树木的生长树干的能力。另一个圆柱体积比其他圆柱形大,它有很大的支撑力量,树枝上挂满果实的时候,它有力地支持了冠,使躯干不会弯曲。

圆柱树干有能有效防止外力破坏。对树木输送养分和水分,如果严重损坏树皮树皮生长,树木获得养分和水分,很快就会枯萎。如果树干或树枝为方形,扁平或其他形状,然后它是外来的伤害比一圈多。许多好处可以看出圆形躯干分支。这是完全的植物要适应自然环境和逐渐形成

谁能给我举个例子解释下递归是什么意思?

首先来看一个例子:有一个Febonacci序列:它的问题是:求这个序列中的第N个数。由于它的函数原形是:f(N)=f(n-1)+f(n-2)这用递归很容易就可以写出代码来,一点都不费事:int Febc(int n) {if(n3) return (1);elsereturn (Febc(n-1)+Febc(n-2));}噢~~~~~也许你会说递归真是太简单了,简直就是一个数学模型嘛,呵呵。其实,递归函数的工作过程就是自己调用自己。有一些问题用递归就很容易解决,简单的你自己都会吃惊。我们做事情,一般都是从头开始的,而递归却是从末尾开始的。比如上面的函数吧,当n3时,它显然只能求助于n-1,n-2。而(n-1)2,(n-2)2时,它们就求助于:(n-1)-1,(n-1)-2;(n-2)-1,(n-2)-2;然后··············直到(n-k)3,(n-k-1)3时,函数Febc终于有了返回值1 了,它再从头开始计算,然后一直算到n 为止。通过上面的例子,我们知道递归一定要有一个停止的条件,否则递归就不知道停止了。在上面的例子中, if(n3) return (1); 就是停止的条件。然而,使用递归的代价是十分巨大的:它会消耗大量的内存!!递归循环时它用的是堆栈,而堆栈的资源是十分有限的。上面的例子你只能用一个很小的n值。如果n=20,即Febc(20)的话,它将调用Febc(N)函数10000多次!!!而上面一个例子用循环也是十分容易写的:/*using turboc2*/int febc(int);main(){int n;scanf("%d",n);febc(N);}int febc(int n){int a[3],i;a[0]=a[1]=a[2]=1;for(i=3;i=n;i++)a[i%3]=a[(i+1)%3]+a[(i+2)%3]; /*实现 Febc(I)=Febc(i-1)+Febc(i-2)*/printf("\n%d\n",a[n%3]);}有兴趣者不妨输入一个较大的n值,然后比较比较这二个函数计算的速度。当然, 如果你使用的n太大的话,递归可能发生错误。如果死机了可别骂我哦~~~ 我已经提醒过你了 :)现在我们再来看看一个求从1 加到100的循环:下面就是递归(请注意了,这种做法不推荐!! 我只是为了说明问题才这么写的。)/*using Turboc2*/int a=0;int account(int);main(){account(100);printf("%d",a);}int account(int i){if(i==1) return 1; /*停止条件*/elsereturn (n+f(n-1)); /*此句有问题*/}在C/C++的问题中,我曾经回答过这样的一个问题:先写出函数表达式:f(N)=f(n-1)+f(n-3)f(N)-f(n-1)=f(n-3)因为第n年要比n-1年多的牛,都是大于三岁的牛生的小牛,而f(n-3)正是那些在n年大于三岁的牛,然后它们在第n年生下相同数量的小牛。(请用BorlandC++3.1或其他C++编译器)#includeiostream.h#includeconio.hint cattle(int,int);void main(){int ct,n;cout"Please input the original cattle number:"endl; /*输入起始牛的数量*/cinct;cout"Input how many years it past:"endl;cinn;cout"You have "cattle(ct,n)" cattle now!"endl;getch();}int cattle(int ct,int n){if(n4) return (ct); /*停止条件*/elsereturn (cattle(ct,n-1)+cattle(ct,n-3)); /*实现递归*/}怎么样,很简单吧。 会用循环求解吗?递归在实际的编程中并不常用,但是在某些情况下,它是非常强有力而漂亮的工具。掌握它的原理时会十分有用的。

递归,举几个简单的例子

比如斐波那契数列,它的定义是:

f[i]={ f[i-2]+f[i-1] (i2)

1 (1=i=2)

那么我们求解f[x]的时候,我们就要求解f[x-1]和f[x-2]。我们求解f[x-1]的时候又要求解f[x-2]和f[x-3]......

这样的求解过程知道求解f[1]和f[2]时结束,这时我们就要回退,把求解的值往上传递,知道f[x-1]和f[x-2]都计算完毕,就可计算f[x]。这样的计算过程就叫递归。f[1]=1,f[2]=1就叫递归边界。一个递归模型必须有边界,否则就会一直往下递归,直到爆栈。

能详细点说明下递归吗,最好有现实例子说明

递归,简单的说就是自己调用自己,执行递归函数降反复调用其自身,每调用一次就进入新的一层。例如,有函数f如下。

int f(int x)

{

int y;

z=f(y);

return z;

}

这个函数是一个递归函数,但是运行该函数将无休止的调用自身,这当然是不正确的,在此只是给你举个简单的例子而已。为了防止调用无休止的进行,必须加条件判断,满足某种条件后就不再做递归调用,然后逐层返回。在此举例说明递归调用的执行过程。

用递归法计算n!.

long f(int i)

{

if(n0) printf("input error");return;

else if(i==0||i==1) return 1;

else return i*f(i-1);

}

main()

{

int n;

printf("please input n:\n");

scanf("%d",n);

printf("%d=%id\n",n,f(n));

}

程序中的f是一个递归函数,如果n0,n==0或者n==1时将结束函数的执行,否则就递归调用f函数自身。

假设输入3,即求3!。进入f函数i=3,不等于0或1,所以执行i*f(i-1),即

3*f(2)。然后再递归调用f(2),2不等于0或1,所以执行i*f(i-1),即2*f(1).继续调用f(1),此时1==1,结束函数的执行。

所以返回的结果是3*f(2)=3*2*f(1)=3*2*1=6.

希望你可以看懂,我感觉蛮简单的。

(责任编辑:IT教学网)

更多