A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐传任 中级黑马   /  2012-9-28 21:10  /  2986 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

嵌套和递归有什么联系和区别??求解释

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

5 个回复

倒序浏览
函数嵌套是语言特性,递归调用是逻辑思想。

函数嵌套允许在一个函数中调用另外一个函数,比如有三个函数

funca()
{
funcb();
}

funcb()
{
funcc();
}

funcc()
{
cout << "Hello" <<endl;
}

这个就叫做嵌套调用,它是一个语言提供的程序设计的方法,也就是语言的特性。

而递归是一种解决方案,一种思想,将一个大工作分为逐渐减小的小工作,比如说一个和尚要搬50块石头,他想,只要先搬走49块,那剩下的一块就能搬完了,然后考虑那49块,只要先搬走48块,那剩下的一块就能搬完了……,递归是一种思想,只不过在程序中,就是依靠函数嵌套这个特性来实现了。

递归最明显的特点就是,自己调用自己(不就嵌套调用了嘛)。
funca()
{
if(statement1)
funca();
else
exit(0);
}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
通俗一点就是
递归:就是调用方法本身,知道达到你要求的界定值
嵌套:就是在本方法中调用其他方法

楼上有示例

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
嵌套调用就是某个函数调用另外一个函数,递归调用是一个函数直接或间接的调用自己。
举几个例子:A调用B(嵌套)B调用C(嵌套)A调用A(递归)A调用B B调用A (递归)A调用B B调用C C调用A (递归)

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
嵌套是指一个过程调用另一个过程的使用,
递归过程是这个过程中调用本过程的使用。
递归是嵌套的一种特殊形式,递归过程必须有“归点”,也就是终止调用本身的一个分支

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
/*
* Created by SharpDevelop.
* User: Administrator
* Date: 2012/10/6
* Time: 12:18
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;

namespace 递归与嵌套
{
    class Program
    {//我来给一个具体的用于求斐波拉携数列的具体小例子!纯属个人理解!
        public static void Main(string[] args)
        {
            OutPutFab();
            Console.ReadKey(true);
        }
        /// <summary>
        /// 实现斐波拉携数列的输出功能
        /// </summary>
        static void OutPutFab()
        {
            Console.Write("请输入要显示的斐波拉携数列的项数(1-30):");
            int Row;
            while(!int.TryParse(Console.ReadLine(),out Row)||Row<1||Row>30)
            {
                Console.Write("输入无效,请重新输入(1-30):");
            }
            for(int i=1;i<Row;i++)
            {
                Console.Write("{0},",Fab(i));//在OutPutFab中调用Fab就叫把Fab嵌套到OutPutFab中。
            }
            Console.Write(Fab(Row));
            
        }/// <summary>
        /// 用于求斐波拉携数列中某项的值
        /// </summary>
        /// <param name="n">项数</param>
        /// <returns></returns>
        static int Fab(int n)
        {
            if(n==1||n==2)
            {
                return 1;
            }
            else if(n>=3)
            {
                return Fab(n-1)+Fab(n-2);//函数调用函数本身,就是递归了。和高中数学学的递归数列差不多。
            }
            else
            {
                return 0 ;
            }
        }
    }
}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马