订阅博客
收藏博客
微博分享
QQ空间分享

排列5走势图,程序员有必要把握的递归算法,中国共产党廉洁自律准则

频道:娱乐消息 标签:ipad4工口游戏 时间:2019年05月05日 浏览:128次 评论:0条

1 导言 占有欲

程序调用自身的编程技巧称为递归(摆放5走势图,程序员有必要掌握的递归算法,中国共产党廉洁自律原则 recursion)。递归作为一种算法在程序设计语言中广泛运用。一个办法或函数在其界说或阐明中有直接或直接调用自身的一种办法,它一般把一个大型杂乱的问题层层转化为一个与原问题类似的规划较小的问题来求解,递归战略只需少数的程序就可描绘出解题进程所需求的屡次重复imax和3d的差异核算,大大地减少了程序的代码量。

例如求和问题:若要求解S100 = 1 + 2 + 3 + 4 + …. + 100的值,经过循环的方毕庆堂式代码塔三布告区如下:

int sum = 0;
for (int i = 1; i <= 100; i++) {
sum = sum + i;
}

经过递归办法是怎么求解呢?由 **1 + 2 + 3 + 4 + …. + 100 **能够分解为 ( 1 + 2 + 3 + 4 + …. + 99) + 100,能够看出

S100 = S99 + 100,能够得出 Sn = Sn-1 + 中北大学个人门户n。经过递归的办法代码如下:

public int sum(摆放5走势图,程序员有必要掌握的递归算法,中国共产党廉洁自律原则int n) {
if (n == 1) {
return 1;
} else {
return sum(n - 1) + n;
}
}

经过递归代码能够元媛看出,sum() 办法中又调用了其自身,仅仅将传入的参数发作改动。这种程序调用自身的办法便是递归。

2 运用场景

什么样的问题才能够运用递归的办法求解呢?构成递归需求具有两个条件:

(1)子问题与原始问题为相同的工作,二者的求解办法是相同的,且子问题比原始问题更易中华烟多少钱一条求解。

(2)递归不能无限制地调用自身,必刘老根须有个递归出口。递归出口对应的景象相对简略,能够化简为非递归情况33处理。

3 实例

3.1 斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多斐波那契(Leonardoda Fibonacci)以兔子繁衍为比如而引进,故又称为“兔子数列”,指的是这样一个数列:

1、1、2、3、5、8、13、21、34、……

在数学上,斐波纳契数列以如下被以递推的办法界说:

F(1)=1,F(2)=1,,F(n) = F(n-1) + F(n-2)(n>=3,n∈N*)

问题剖析:

斐波那契数列的关于原问题F(n)的求解能够转为对F(n-1)、F(反物质n-2)两个子问题的求解,故符安妮宝物老公傅耀东合条件(1)。由F(1)=1,F(2)=1,能够得出斐波那契数列问题是有递归出口的,递归出口对应F(1) = 1,F(2) = 1。求解斐波那契数列的代码如下:

public class FibonacciSequence {
pub雨后的故事lic static void main(Strin摆放5走势图,程序员有必要掌握的递归算法,中国共产党廉洁自律原则g[] args){
System.out.println(Fribonacci(9));
}
public static int Fribonacci(int 摆放5走势图,程序员有必要掌握的递归算法,中国共产党廉洁自律原则n)李怀松{
if(n <= 2)
return 1;
else
return Fribonacci(n-1)+Fribonacci(n-2);
}
}

3.2 阶乘问题

阶乘问题的数学表达式为:n! = n * (n-1) * (n-2) * …* 1 (n>0)。经过剖析能够得出n! = (n-1)! * n。令F(n) = n!,则F(n) = F(n-1)老虎机 * n。则阶乘问题契合条件(1)。由0! = 1,能够得出F(0) = 1。则阶乘问题契合条件(2),递归出口为F(0) = 1。运用递归求解阶乘问题代码如下:

int factonguetorial(int n)
{
int sum = 0;
if (0 == n)
return 1;
else
sum = n *最新伤感网名 factorial(n-1);
return sum;
}

3.3 树的遍历

关于树遍历问题在之前树的专题中现已具体介绍,这儿不再赘述。二叉树的遍历代码如下:

/*前序遍历算法*/
void PreOderTraverse(BiTree T)
{
if(T == NULL)
return;
pr性爱天堂intf("%c",T->data); //显现结点数据,能够更改为其他对结点操作
PreOderTraverse(T->lchild); //先遍历左子树
PreOderTraverse(T->rchild); //最终遍历右子树
}
/*中序遍历递归算法*/
void InOderTraverse(BiTree T)
{
if(T == NULL)
retu泄欲东西rn ;
InOderTraverse(T->lchild); //中序遍历左子树
printf("%c",T->data); //显现结点数据,能够更改为其他对结点的操作
InOderTraverse(T->rchild); //最终中序遍历右子树
}
/*后摆放5走势图,程序员有必要掌握的递归算法,中国共产党廉洁自律原则序遍历递归算法*/
void PostOderTraverse(T)
{
if(T==NULL)
retu摆放5走势图,程序员有必要掌握的递归算法,中国共产党廉洁自律原则rn;
PostOderTraverse(T->lchild); //先遍历左子树
PostsOderTraverse(T->rchild); //再遍历右子树
printf("%c",T->data); //显现结点数能够更改为其他对结点数据
}

经过代码能够看出,二叉树的遍历进程运用递归办法完成既有助于了解,又简化了代码量。

4 结语

运用递归求解问题就比如,你手中有一把钥匙想要翻开一扇门。当你翻开面前这扇门,看到屋里边还有一扇门。你走过去,发现手中的钥匙还能够翻开它,你推开门,发现里边还有一扇门,你继摆放5走势图,程序员有必要掌握的递归算法,中国共产党廉洁自律原则续翻开它。若干次之后,你翻开面前的门后,发现只要一间屋editplus子,没有门了。然后,你开端原路回来,每走回一间屋子,你数一次,走到进口的时分,你能够回答出你究竟用这你把钥匙翻开了几扇门。

递归算法的运用非常广泛,运用递归算法能够使你的代码依据“高雅”。