加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

递归之杨辉三角实例讲解

发布时间:2020-12-16 09:09:40 所属栏目:百科 来源:网络整理
导读:本文利用杨辉三角来具体说明一个递归的实现,实现的条件,如果理解不对的地方还请指教。 一、杨辉三角说明 杨辉三角是二项式系数在三角形中的一种集合排列。下面引用wiki上的动态图来展示一下。 ? 相信大家看了这张图应该就能明白杨辉三角了吧。下面在代码中

本文利用杨辉三角来具体说明一个递归的实现,实现的条件,如果理解不对的地方还请指教。

一、杨辉三角说明

杨辉三角是二项式系数在三角形中的一种集合排列。下面引用wiki上的动态图来展示一下。

?

相信大家看了这张图应该就能明白杨辉三角了吧。下面在代码中讲解递归。、

二、代码讲解

#include<iostream>
using namespace std;
#define max 10
/*下面定义的这个数组本来是要递归一遍直接记录在数组里面的,而不用每求一个再去递归,但是这道题不大使用,因为在if条件里面有一个return,
如果改的话,就直接计算了,可以不用递归了,所以这里算是强行用一波递归吧嘿嘿嘿*/
int print[max][max] = { 0 };

int digui(int row,int col) {
    if (col == 0 || row == col) {
        print[row][col] = 1;
        return ;
    }
    else {
        return digui(row - 1,col - 1) + digui(row - //这个的值就是前面的两个数相加得来
    }
}

void main() {
    for (int _row = 0; _row < max; _row++) {
        int _col = 0; _col <= _row; _col++) {
            printf("%5d",digui(_row,_col));
        }
        printf(n);
    }
}

?

首先,如果做的听的递归的题目多了之后,就会发现,递归要满足两个条件:

一是,要有使递归进行下去的变量,在这里就是row和col(行和列);

二是,要有终止递归的条件,在这里就是当row和col相等或者col==1的时候。

递归在经典的问题中用到很多,下面写几个问题的伪程序:

斐波那契数列

13世纪意大利数学家斐波那契的《算盘书》中记载了典型的兔子产仔问题,其大意如下:

如果一对一个月大的兔子以后每一个月都可以生一对小兔子,而一对新生的兔子出生两个月才可以生出小兔子。也就是,1月份出生,3月份开始产仔。那么假定一年内没有产生兔子死亡事件,那么1年之后共有多少对兔子呢?

int Febonaci( n) {
     t1,t2;
    if (n > if (n == 1 || n == 2)
             {
            t1 = Febonaci(n-);
            t2 = Febonaci(n-);
            return t1 + t2;//规律是第n个月的兔子数等于前一个月和前两个月的兔子数之和;
        }
    }
    ;
    }
}

汉诺塔

题意:把a上的num个轮盘通过b移动到c上,这num个罗盘大小均不相同,规则是:大罗盘必须在小轮盘上面。

这里的num是罗盘的数量,a是罗盘最初在的杆,b是借用实现转移的杆,c是罗盘最终要移动到的杆*/
hanota(num,a,b,c) {
    if (num == )
        move(,a,c);
     {
        hanota(num -  }
}

?

三、最后

? ? ? ? ? ?最后说一下,递归的实现过程吧,我简单说一下,然后给出一个详细说明的链接。

首先应该知道函数时保存在栈中的,当调用函数调用一个被调用函数的时候,就将这个被调用函数压入栈中,并且保存这个函数的“状态“(包括实参等)最后入栈的是调用函数的返回地址,当这个函数执行的时候,调用函数的自变量又被压入栈中。当前面的被调用函数有调用函数的时候,就会继续压栈。所以递归不能无限执行,会溢出。当这个函数执行完的时候,就会被弹出栈,接着执行下一个函数,这里的如何找到下一个函数,是通过一个地址指针。

详细说明

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读