×

递归函数python 递归 递归函数

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

admin admin 发表于2022-05-21 07:20:49 浏览129 评论0

抢沙发发表评论

python递归函数


def Sum(m): #函数返回两个值:递归次数,所求的值 if m==1:return 1,m return 1+Sum(m-1),m+Sum(m-1)cishu=Sum(10) print cishu 》》》 def Sum(m,n=1): ... if m==1:return n,m ... return n,m+Sum(m-1,n+1) 》》》 print Sum(10) 10 》》》 print Sum(5) 5

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


首先来看一个例子: 有一个Febonacci序列: 它的问题是:求这个序列中的第N个数。 由于它的函数原形是:f(N)=f(n-1)+f(n-2) 这用递归很容易就可以写出代码来,一点都不费事: int Febc(int n) { if(n《3) return (1);elsereturn (Febc(n-1)+Febc(n-2));}噢~~~~~也许你会说递归真是太简单了,简直就是一个数学模型嘛,呵呵。 其实,递归函数的工作过程就是自己调用自己。有一些问题用递归就很容易解决,简单的你自己都会吃惊。 我们做事情,一般都是从头开始的,而递归却是从末尾开始的。比如上面的函数吧,当n》3时,它显然只能求助于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(n《3) 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,i; a=a=a=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++编译器) #include《iostream.h》 #include《conio.h》 int cattle(int,int); void main(){int ct,n;cout《《“Please input the original cattle number:“《《endl; /*输入起始牛的数量*/cin》》ct;cout《《“Input how many years it past:“《《endl;cin》》n;cout《《“You have “《《cattle(ct,n)《《“ cattle now!“《《endl;getch();}int cattle(int ct,int n){if(n《4) return (ct); /*停止条件*/elsereturn (cattle(ct,n-1)+cattle(ct,n-3)); /*实现递归*/}怎么样,很简单吧。 会用循环求解吗? 递归在实际的编程中并不常用,但是在某些情况下,它是非常强有力而漂亮的工具。掌握它的原理时会十分有用的。

JAVA中的递归方法


自己调用自己或几个方法相互调用。

最经典的是求正整数阶的算法:

int fact(int i){

if(i《=1)return 1;

return fact(i-1)*i;

}

多数递归方法可以转换成非递归方法。

一般同功能的非递归方法,执行效率要优于递归方法。但合理的使用递归方法,可以使代码结构更清晰,更有可读性,从而更方便维护。

Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。-递归函数