Java递归函数

原文:http://blog.163.com/zhuliqing_001/blog/static/293340982010101046597/

1 、递归函数的定义:

答:递归函数即自调用函数,在函数体内直接或间接的调用自己,即函数的嵌套是函数本身。

2 、递归方式:递归调用有直接递归和间接递归两种方式。

A :直接递归:在函数中出现调用函数本身。

示例 1 :下面代码求斐波那契数列第 n 项,斐波那契数列第一和第二项是 1 ,后面每一项是前两项之和,即 1 、 1 、 2 、 3 、 5 、 8 、 13  ...。

程序代码:

public class Test {

  public static void main(String args[]) {

    int x1 = 1;

    int sum = 0;

    int n = 7;

 

    for (int i = 1; i <= n; i++) {

      x1 = func(i);

      sum = sum + x1;

    }

    System.out.println("sum=" + sum);

  }

 

  public static int func(int x) {

    if (x > 2)

      return (func(x - 1) + func(x - 2));

    else

      return 1;

  }

}

 

B :间接递归:指函数中调用了其他函数,而该其他函数有调用了本函数。

示例 2 :用间接递归来计算上述斐波那契数列。

程序代码:

public class Test {

  public static void main(String args[]) {

    int x1 = 1;

    int sum = 0;

    int n = 7;

 

    for (int i = 1; i <= n; i++) {

      x1 = func1(i);

      sum = sum + x1;

    }

    System.out.println("sum=" + sum);

  }

  public static int func1(int a){

      int b;

      b=func2(a);

          return b;

  }

 

  public static int func2(int b) {

    if (b> 2)

      return (func1(b - 1) + func1(b - 2));

    else

      return 1;

  }

}

3 、为什么要用递归函数?递归函数的缺点是什么?

答:递归的目的是简化程序设计,使程序易读。

示例 3 :下面不用递归函数继续来计算上述斐波那契数列。

程序代码:

public class Test {

  public static void main(String args[]) {

    int n=7;

    int a=1, b=1, temp;

    int sum=2;

 

    for(int i=3; i<=n; i++){

      temp=a+b; a=b; b=temp;

           sum=sum+temp;

    }

    System.out.println("sum=" + sum);   

  }

}

从上面例子我们可以发现虽然非递归函数效率高,但较难编程,可读性较差。递归函数的缺点是增加了系统开销,也就是说,每递归一次,栈内存就多占用一截。

 

4 、递归的条件:

答:需有完成任务的语句,需满足递归的要求(减小而不是发散)。

5 、递归进阶:

示例 4 :

编程求解:若一头小母牛,从出生起第四个年头开始每年生一头母牛,按次规律,第 n 年时有多少头母牛?

 

程序代码:

public class Test3 {

  public static void main(String args[]) {

    int n=10;  // 要查看的年数

    System.out.println(" 共有 "+cattle(n)+" 头小母牛! ");

  }

  public static int cattle(int n){

    if(n<=0)

      return 0;

    if(n<=3)

      return 1;

    return cattle(n-1)+ cattle(n-3);// 此处是递归要好好理解。    

  }

}

 

规律:此类问题的递归函数为:

如果要求的是从出生起第四个年头,则递归函数为 cattle(n-1)+ cattle(n-3) ,

如果要求的是从出生起第五个年头,则递归函数为 cattle(n-1)+ cattle(n-4) ,

。。。。

依次类推。

(原代码全部在 JBuilderX 下调试通过)

转载于:https://www.cnblogs.com/zhaofei/p/3372859.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php的ddd,在MVC框架中实现DDD – PHP

在mvc中,模型是一个层,它包含所有的域业务逻辑.在域驱动设计中,业务逻辑可以分为各种构建块.在域驱动设计域模型中.A domain model is a system of abstractions that describes selectedaspects of a sphere of knowledge,influence or activity (a domain).The model can the…

Netty Associated -- ByteBuf

ByteBuf ByteBuf是Netty的Server与Client之间通信的数据传输载体.他提供了一个byte数组(byte[])的抽象视图 buffer创建 我们推荐通过一个Unpooled的帮助方法来创建新的buffer而不是通过调用独立的构造器来创建 随机访问索引 就像普通的原声字节数组一样, ByteBuf使用零基坐标(z…

php 根号2计算过程,根号2以及π的计算--关于无理数的畅想

[导读]这两篇文章里&#xff0c;我发现不需要那些老师教的范式也能很好地理解那些现代概念&#xff0c;并且理解的更深刻。这两篇文章里&#xff0c;我发现不需要那些老师教的范式也能很好地理解那些现代概念&#xff0c;并且理解的更深刻。我一般假设自己从来没有学过微积分&a…

oracle对象权限 函数,oracle的系统和对象权限

alter any cluster 修改任意簇的权限alter any index 修改任意索引的权限alter any role 修改任意角色的权限alter any sequence 修改任意序列的权限alter any snapshot 修改任意快照的权限alter any table 修改任意表的权限alter any trigger 修改任意触发器的权限alter clust…

批处理程序实例

一、交互界面设计 没啥说的&#xff0c;看看高手设计的菜单界面吧&#xff1a;echo offclstitle 终极多功能修复:menuclscolor 0Aecho.echo echo 请选择要进行的操作&#xff0c;然后按回车echo echo.echo 1.网络修复及上网相关设置,修复IE,自定义屏蔽网站echo.echo 2.病毒专杀…

oracle 10g dsg,【ORACLE】relink oracle 10g 数据库

通常要迁移一个数据库&#xff0c;我们会使用1 冷备份&#xff0c;整个数据库迁移&#xff0c;2 rman duplicate 功能进行复制到本机或者复制到异机&#xff0c;前面两种都必须先在目标库上安装软件。这里测试另外一种方法&#xff1a;对于单实例数据库&#xff0c;复制整个ora…

任务分配与时间估计

各成员的任务分配与时间估计如下&#xff1a; 项目所需总时间为&#xff1a; 转载于:https://www.cnblogs.com/buaa-smile/p/3383374.html

vbs 连oracle 负载均衡,(原)QTP中用VBS调用PLSQL并执行相关语句

今天工作的需求是要在录制一段web程序之前要调用plsql并执行一段数据库代码清空相关数据才能做web录制测试&#xff0c;本来是想用QTP直接录制plsql的&#xff0c;但是后来发现自己对qtp录制window application并不是很了解&#xff0c;选定了 Automation菜单下的Record and Ru…

unity中发布android时候出现这样的提示错误:error:device not found

原因很简单&#xff0c;就是你没开启安卓设备&#xff0c;无论是安卓手机还是安卓虚拟器。。 解决办法&#xff1a;只要开启安卓虚拟器或者连接手机即可 再次打开cmd命令窗口&#xff0c;找到apk文件所在路径&#xff0c;例如&#xff1a; D: 回车&#xff08;我的是在d盘根目录…

Oracle 每个session的限制,限制oracle普通用户能且只能kill自己的会话

声明&#xff1a;仅用于测试环境方便调试&#xff0c;不可能应用于生产环境&#xff1b;故请勿加入到程序源代码来实现自动杀进程。只需一个参数&#xff0c;就能kill用户自己的会话&#xff0c;请小心操作&#xff0c;以免误kill进程。使用方法&#xff1a;新开一个session后&…

Hessian简介

Hessian Hessian是一个轻量级的remoting onhttp工具&#xff0c;使用简单的方法提供了RMI的功能。 相比WebService&#xff0c;Hessian更简单、快捷。采用的是二进制RPC协议&#xff0c;因为采用的是二进制协议&#xff0c;所以它很适合于发送二进制数据目 录 1介绍 1.1 注意事…

linux 以某个用户执行,Linux root用户肿么以制定的用户去执行某个程序。

chmod o-x m1说明&#xff1a;命令格式&#xff1a;chmod [options] mode files只能文件属主或特权用户才能使用该功能来改变文件存取模式。mode可以是数字形式或以who opcode permission形式表示。who是可选的&#xff0c;默认是a(所有用户)。只能选择一个opcode(操作码)。可指…

linux启动sh文件命令,Linux下如何写 .sh 脚本启动 项目

Linux下如何写 .sh 脚本启动 项目创建文件 mealcoupon.sh内容如下&#xff1a;#!/bin/bash#这里可替换为你自己的执行程序&#xff0c;其他代码无需更改APP_NAMExhqy_yzf-1.0.0.war#项目的路径(替换成你项目的路径)PROJECT_LOCATION/home/xpro/xhqy_jt#使用说明&#xff0c;用…

[wikioi]奇怪的梦境

http://wikioi.com/problem/2833/ 拓扑排序&#xff0c;居然1A&#xff0c;哈哈。 #include <cstdio> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <memory.h> #define MAX(a, b) a>b?a:b…

linux所有用户无法登录用户名和密码错误,为什么linux登录不了啊,用户名和密码都没问题,就是出现这个,有高手指点一下。...

为什么linux登录不了啊&#xff0c;用户名和密码都没问题&#xff0c;就是出现这个&#xff0c;有高手指点一下。关注:121 答案:6 mip版解决时间 2021-02-04 23:27提问者删除记忆里的你2021-02-04 04:27最佳答案二级知识专家那年夏天2021-02-04 05:19用户名肯定是root&#x…

Notes of the scrum meeting(2013/10/23)

ps&#xff1a;本来是10月23号周三下午开的会&#xff0c;这几天由于各种事情忙&#xff0c;忘记写博客了&#xff0c;现在补上。 软工项目组buaa_smile开始项目第一次scrum meeting meeting time:4:00~5:00p.m.,October 23th,2013 meeting place:主M202 attendees: 顾育豪 …

linux查用户的家目录,详解Linux误删用户家目录的恢复方法

在生产中可能会由于误操作而删除了某一用户的家目录&#xff0c;这时就需要把用户的家目录安装创建新用户时的模板文件&#xff0c;再恢复并且要跟之前的权限相同。1. 创建一个新的用户用于测试[rootcentos6 aubin]# useradd wangcai2. 新用户创建完成时会在/home下面自动创建同…

linux spring mvc tomcat配置,Spring MVC配置详解

一、Spring MVC处理流程1.Spring MVC将所有请求都交由DispatchServlet进行处理。2.DispatchServlet获取HandlerMapping(处理映射器)&#xff0c;然后找到对应的HandlerBean处理Controller请求&#xff0c;并返回一个ModelAndView对象。3.DispatchServlet查询一个或多个ViewReso…