今天给各位分享递归函数例子的知识,其中也会对递归函数例子有哪些进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
在计算机科学中,递归函数是一种非常有趣且强大的工具。它能够以简洁的方式解决一些复杂的问题。递归函数的基本思想是将一个问题分解成若干个规模较小的同类问题,然后递归地求解这些小问题,最终将小问题的解合并成原问题的解。本文将详细介绍递归函数的例子,并探讨其在实际问题中的应用。
1. 递归函数的定义
递归函数是一种在函数内部调用自身的方法。递归函数通常具有以下特点:
- 基础条件:递归函数必须有一个基础条件,用于停止递归调用。
- 递归步骤:递归函数必须有一个递归步骤,用于将问题分解成规模较小的同类问题。
2. 递归函数的例子
以下是一些常见的递归函数例子:
2.1 斐波那契数列
斐波那契数列是一个著名的数列,其特点是每个数都是前两个数的和。例如,斐波那契数列的前10个数为:1, 1, 2, 3, 5, 8, 13, 21, 34, 55。
斐波那契数列的递归函数如下:
“`python
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
“`
| n | fibonacci(n) |
|---|---|
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
| 4 | 3 |
| 5 | 5 |
| 6 | 8 |
| 7 | 13 |
| 8 | 21 |
| 9 | 34 |
| 10 | 55 |
2.2 汉诺塔问题
汉诺塔问题是一个经典的递归问题。问题描述:有3个大小不同的盘子,分别放在3根柱子上,要求将盘子按照从小到大的顺序移动到另一根柱子上,每次只能移动一个盘子,且在移动过程中,大盘子不能放在小盘子上面。
汉诺塔问题的递归函数如下:
“`python
def hanoi(n, source, target, auxiliary):
if n == 1:
print(f”
c语言中,什么是函数的递归,能举个例子么
所谓递归,说的简单点,就是函数自己调用自己,然后在某个特定条件下。结束这种自我调用。
如果不给予这个结束条件,就成了无限死循环了。这样这个递归也就毫无意义了。
如下面问题
1 1 2 3 5 8 13 21……..n
分析可以看出,i表示第几个数, n表示该数的值
当i= 1时, n= 1;
当i= 2时, n= 1;
当i= 3时 n= i1+ i2;
当i= 4时 n= i2+ i3
所以可以写个函数
int fun(int n)//这里的n代表第几个数
{
if(1== n||2== n)//第一个数
{
return 1;
}
else
{
return fun(n- 1)+ fun(n- 2);//这里就是自己调用自己,形成循环自我调用。
}
}
注:以上代码只是用来演示递归,不包含错误校验。
在实际生产过程中。该代码不够健壮。
如此,就完成了递归。你就可以求得第n个数了。
何时考虑使用递归。
当你分析一个问题的时候,发现这个问题,是一个自我循环时,而且这个自我循环到一个给定值,就可以终止的时候,你就快要考虑递归了。
c语言函数的递归调用
这段程序的意思是对传来的参数n,如果n<1,程序会崩溃;如果n>1则没大1,返回就多2,最后必然会执行c=10。比如n=5,则返回的是18((5-1)x2+10=18)
比如说做了5次递归,即n=5;执行的操作如下:
第1次调用(n=5),定义了一个intc;
第2次调用(n=4),定义了一个intc;
第3次调用(n=3),定义了一个intc;
第4次调用(n=2),定义了一个intc;
低5次调用(n=1),定义了一个intc;
n=1时,满足了条件n==1,故此时c=10;
第5次返回,此时第5次定义的c=age(intn)=10;前4次定义的intc没有值,下同
第4次返回,此时第4次定义的c=age(intn)+2=10+2=12
第3次返回,此时第3次定义的c=age(intn)+2=12+2=14
第2次返回,此时第2次定义的c=age(intn)+2=14+2=16
第一次返回,此时第一次定义的c=age(intn)+2=16+2=18。此时按下面的程序b接收了返回值
我觉得你应该注意的是age(intn)本身就代表一个int值,就算没有参数接收也可以参与到运算当中,就像这个例子一样。
程序:
#include<stdio.h>
intage(intn)
{intc;
if(n==1)
c=10;
else
c=age(n-1)+2;
returnc;
}
voidmain()
{
inta=0,b=0;
scanf(“%d”,&a);
b=age(a);
printf(“resultis%d
“,b);
}
请高手写一个通达信的递归函数的例子
通达信没有递归功能,只能自己做。
我自己做的一个缠论副图公式,尚未完成,但基本功能包括K线包含,底分型,顶分型,都有了。你参考下。
{每一天需要有几个参数:1、最高价,最低价,是否被前K线包含,所属走势类似(1=上升,2=下跌,3=顶分型,4=底分型,走势和分型都是最后一个K线确定,
在顶底未定之前都是走势)}
MA5:=MA(C,5);MA10:=MA(C,10);
ZB:CURRBARSCOUNT,NODRAW;{为每根K线建立坐标}
L1:= ZB>1 AND H<=REF(H,1) AND L>=REF(L,1),NODRAW;{1=当天是左包含关系}L2:= ZB>2 AND REF(L1,1) AND H<=REF(H,2) AND L>=REF(L,2),NODRAW;{1=连续2天是左包含关系}
L3:= ZB>3 AND REF(L2,1) AND H<=REF(H,3) AND L>=REF(L,3),NODRAW;{1=连续3天是左包含关系}L4:= ZB>4 AND REF(L3,1) AND H<=REF(H,4) AND L>=REF(L,4),NODRAW;{1=连续4天是左包含关系}
L5:= ZB>5 AND REF(L4,1) AND H<=REF(H,5) AND L>=REF(L,5),NODRAW;{1=连续5天是左包含关系}L6:= ZB>6 AND REF(L5,1) AND H<=REF(H,6) AND L>=REF(L,6),NODRAW;{1=连续6天是左包含关系}
L7:= ZB>7 AND REF(L6,1) AND H<=REF(H,7) AND L>=REF(L,7),NODRAW;{1=连续7天是左包含关系}L8:= ZB>8 AND REF(L7,1) AND H<=REF(H,8) AND L>=REF(L,8),NODRAW;{1=连续8天是左包含关系}
L9:= ZB>9 AND REF(L8,1) AND H<=REF(H,9) AND L>=REF(L,9),NODRAW;{1=连续9天是左包含关系}L10:= ZB>10 AND REF(L9,1) AND H<=REF(H,10) AND L>=REF(L,10),NODRAW;{1=连续10天是左包含关系}
LIN: IF(L1 OR L2 OR L3 OR L4 OR L5 OR L6 OR L7 OR L8 OR L9 OR L10,1,0),NODRAW;{左包含}
LH: IF(L10,REF(H,10),IF(L9,REF(H,9),IF(L8,REF(H,8),IF(L7,REF(H,7),IF(L6,REF(H,6),IF(L5,REF(H,5),IF(L4,REF(H,4),IF(L3,REF(H,3),IF(L2,REF(H,2),IF(L1,REF(H,1),H)))))))))),NODRAW;
LL: IF(L10,REF(L,10),IF(L9,REF(L,9),IF(L8,REF(L,8),IF(L7,REF(L,7),IF(L6,REF(L,6),IF(L5,REF(L,5),IF(L4,REF(L,4),IF(L3,REF(L,3),IF(L2,REF(L,2),IF(L1,REF(L,1),L)))))))))),NODRAW;
R1:= IF(ISLASTBAR,0,ZB>1 AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=当天是右包含关系}R2:= IF(ISLASTBAR,0,ZB>2 AND REF(R1,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续2天是右包含关系}
R3:= IF(ISLASTBAR,0,ZB>3 AND REF(R2,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续3天是右包含关系}R4:= IF(ISLASTBAR,0,ZB>4 AND REF(R3,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续4天是右包含关系}
R5:= IF(ISLASTBAR,0,ZB>5 AND REF(R4,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续5天是右包含关系}R6:= IF(ISLASTBAR,0,ZB>6 AND REF(R5,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续6天是右包含关系}
R7:= IF(ISLASTBAR,0,ZB>7 AND REF(R6,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续7天是右包含关系}R8:= IF(ISLASTBAR,0,ZB>8 AND REF(R7,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续8天是右包含关系}
R9:= IF(ISLASTBAR,0,ZB>9 AND REF(R8,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续9天是右包含关系}R10:=IF(ISLASTBAR,0,ZB>10 AND REF(R9,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续10天是右包含关系}
RIN: IF(R1 OR R2 OR R3 OR R4 OR R5 OR R6 OR R7 OR R8 OR R9 OR R10,1,0),NODRAW;{右包含}LD:= CONST(DAYTODATE((DATETODAY(DATE)-FINANCE(42))))+19000000,NODRAW;{上市年月日}
RH:= IF(R10,REFX(H,10),IF(R9,REFX(H,9),IF(R8,REFX(H,8),IF(R7,REFX(H,7),IF(R6,REFX(H,6),IF(R5,REFX(H,5),IF(R4,REFX(H,4),IF(R3,REFX(H,3),IF(R2,REFX(H,2),IF(R1,REFX(H,1),H)))))))))),NODRAW;
RL:= IF(R10,REFX(L,10),IF(R9,REFX(L,9),IF(R8,REFX(L,8),IF(R7,REFX(L,7),IF(R6,REFX(L,6),IF(R5,REFX(L,5),IF(R4,REFX(L,4),IF(R3,REFX(L,3),IF(R2,REFX(L,2),IF(R1,REFX(L,1),L)))))))))),NODRAW;
CK: NOT(LIN OR RIN),NODRAW;{当前K线是有效的缠论K线}CK0:=LIN OR RIN,NODRAW;
CKA1:= IF(ISLASTBAR,0,IF(REFX(CK,1),1,IF(REFX(CK,2),2,IF(REFX(CK,3),3,IF(REFX(CK,4),4,IF(REFX(CK,5),5,IF(REFX(CK,6),6,IF(REFX(CK,7),7,IF(REFX(CK,8),8,IF(REFX(CK,9),9,IF(REFX(CK,10),10,0))))))))))),NODRAW;
{后续第一根有效缠论K线到当前K线周期数} CKA2:= IF(ISLASTBAR,0,CKA1+REFX(CKA1,CKA1)),NODRAW;{后续第二根缠论K线到当前周期数}
V1: REF(CK,1),NODRAW;V2:= REF(CK0,1) AND REF(CK,2),NODRAW;V3:= REF(CK0,1) AND REF(CK0,2) AND REF(CK,3),NODRAW;V4:= REF(CK0,1) AND REF(CK0,2) AND REF(CK0,3) AND REF(CK,4),NODRAW;
V5:= REF(CK0,1) AND REF(CK0,2) AND REF(CK0,3) AND REF(CK0,4) AND REF(CK,5),NODRAW;V6:= REF(CK0,1) AND REF(CK0,2) AND REF(CK0,3) AND REF(CK0,4) AND REF(CK0,5) AND REF(CK,6),NODRAW;
V7:= REF(CK0,1) AND REF(CK0,2) AND REF(CK0,3) AND REF(CK0,4) AND REF(CK0,5) AND REF(CK0,6) AND REF(CK,7),NODRAW;V8:= REF(CK0,1) AND REF(CK0,2) AND REF(CK0,3) AND REF(CK0,4) AND REF(CK0,5) AND REF(CK0,6) AND REF(CK0,7) AND REF(CK,8),NODRAW;
V9:= REF(CK0,1) AND REF(CK0,2) AND REF(CK0,3) AND REF(CK0,4) AND REF(CK0,5) AND REF(CK0,6) AND REF(CK0,7) AND REF(CK0,8) AND REF(CK,9),NODRAW;
V10:=REF(CK0,1) AND REF(CK0,2) AND REF(CK0,3) AND REF(CK0,4) AND REF(CK0,5) AND REF(CK0,6) AND REF(CK0,7) AND REF(CK0,8) AND REF(CK0,9) AND REF(CK,10),NODRAW;
CKB1: IF(CK AND V1,1,IF(CK AND V2,2,IF(CK AND V3,3,IF(CK AND V4,4,IF(CK AND V5,5,IF(CK AND V6,6,IF(CK AND V7,7,IF(CK AND V8,8,IF(CK AND V9,9,IF(CK AND V10,10,0)))))))))),NODRAW;
{前面一根有效缠论K线到当前K线周期数} CKB2:= CKB1+REF(CKB1,CKB1),NODRAW;{前面第二根缠论K线到当前的周期数}
UPXBGN:= IF(ISLASTBAR,0,IF(CK AND LH<REFX(LH,CKA1) AND REFX(LH,CKA1)> REFX(LH,CKA2),1,0)),NODRAW;
UPXMID:= IF(CK AND REF(UPXBGN,CKB1) AND LH>REF(LH,CKB1) AND LH>REFX(LH,CKA1),1,0),NODRAW;
UPXEND:= IF(CK AND REF(UPXBGN,CKB2) AND REF(UPXMID,CKB1) AND LH<REF(LH,CKB1) AND REF(LH,CKB1)> REF(LH,CKB2),1,0),NODRAW;
DWXBGN: IF(ISLASTBAR,0,IF(CK=1 AND LL>REFX(LL,CKA1) AND REFX(LL,CKA1)< REFX(LL,CKA2),1,0)),NODRAW;
DWXMID: IF(CK AND REF(DWXBGN,CKB1) AND REF(LL,CKB1)>LL AND LL< REFX(LL,CKA1),1,0),NODRAW;
DWXEND:= IF(CK AND REF(DWXMID,CKB1) AND REF(DWXBGN,CKB2) AND REF(LL,CKB2)> REF(LL,CKB1) AND REF(LL,CKB1)< LL,1,0),NODRAW;
UPX0:= BARSSINCE(UPXMID),NODRAW;DWX0:= BARSSINCE(DWXMID),NODRAW;
X0: IF(UPX0>DWX0,1,0),NODRAW;{X0表示该股第一次分型的类型,1表示顶分型,0表示底分型};
SZXBGN:=IF(CK AND ISLASTBAR AND H<=REF(H,1),0,IF(CK AND LH>REF(LH,CKB1),1,0)),NODRAW;
LASTUPX: REF(BARSLAST(UPXMID),1),NODRAW;
LASTDWX: REF(BARSLAST(DWXMID),1),NODRAW;
NEWUPX: UPXMID,NODRAW;
NEWDWX: DWXMID,NODRAW;
UPX: REF(NEWUPX,CKB1) AND UPXMID,NODRAW;DWX: REF(NEWDWX,CKB1) AND DWXMID,NODRAW;
STICKLINE(LIN OR RIN,H,L,0.8,1),COLORGRAY;
{STICKLINE(NOT(LIN OR RIN) AND C>O,H,L,0.8,2),COLORRED;
STICKLINE(NOT(LIN OR RIN) AND C<O,H,L,0.8,2),COLORCYAN;
STICKLINE(NOT(LIN OR RIN) AND C=O,H,L,0.8,2),COLORWHITE;
}
STICKLINE(NOT(LIN OR RIN),H,L,0.8,2),COLORWHITE;
STICKLINE(UPXMID,LH,LL,1,0),COLORRED;
STICKLINE(DWXMID,LH,LL,1,0),COLORCYAN;
DRAWLINE(NEWUPX,LH,DWXMID,LL,0),COLORGREEN,LINETHICK1;
DRAWLINE(NEWDWX,LL,UPXMID,LH,0),COLORGREEN,LINETHICK1;
关于递归函数例子和递归函数例子有哪些的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。




