算法思想——迭代 (用java语言实现 迭代相关的6个案例等)

1. 首先看一下:递归,递推,迭代有什么区别?

递归:程序调用自身的编程技巧称为递归,是函数自己调用自己。
使用递归要注意的有3点:

  1. 递归就是在过程或函数里面调用自身;
  2. 在使用递归时,必须有一个明确的递归结束条件,称为递归出口.
  3. 递归包含回溯和递推两个阶段。

迭代:利用变量的原值推算出变量的一个新值,如果递归是自己调用自己的话,迭代就是A不停的调用B。

递推:它是按照一定的规律来计算序列中的每个项,通常是通过计算机前面的一些项来得出序列中的指定象的值。其思想是把一个复杂的庞大的计算过程转化为简单过程的多次重复。

递归与递推的区别:递归的步骤中包含递推,如一个规模为n的问题,递归首先通过回溯将问题回溯到n-1,n-2……,然后再通过递推从1的结果一直递推到n。

递归与迭代的区别:递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出.
递推和迭代的区别:都是正向的将一个复杂问题分解为小问题,一步一步得出结果;而递归是逆向的,多了一步回溯的过程。

2.下面详细看一下迭代法:

迭代法:有一定规律。 每次循环都是从上次运算结果中获得数据,本次运算的结果都是要为下次运算做准备。

1. 求100以内所有数的和。

/**
 * 求100以内所有数的和
 */
public class Example {
    public static void main(String[] args) {
        int sum = 0;
        for(int a=0;a<=100;a++) {
           sum = sum + a;
        }
        System.out.println("100以内所有数的和为:"+sum);
    }
}

执行结果如下图所示:
在这里插入图片描述

2. 求阶乘!(6的阶乘)。

/**
 * 求6的阶层
 */
public class Example {
    public static void main(String[] args) {
        int jc = 1;
        for(int a=6;a>=1;a--) {
           jc = a * jc;
        }
        System.out.println("6的阶层是:"+jc);
    }
}

执行结果如下图所示:
在这里插入图片描述

3. 一张纸的厚度是:0.15mm,假设这张纸足够大可以无限次对折,问:折26次的高度是多少?

/**
 * 一张纸的厚度是:0.15mm,假设这张纸足够大可以无限次对折,问:折26次的高度是多少?
 */
public class Example {
    public static void main(String[] args) {
        double h = 0.00015;
        for(int a=1;a<=26;a++) {
           h = h * 2;
        }
        System.out.println("折26次的高度为: "+h+"米。");
    }
}

执行结果如下图所示:
在这里插入图片描述

4. 猴子吃桃问题:公园里有一只猴子和一堆桃子,猴子每天吃掉桃子数量的一半,把剩下的一半数量中扔掉一个坏的,到了第七天,猴子睁开眼发现只剩下一个桃子了,问公园原来有多少桃子?

/**
 * 猴子吃桃问题
 */
public class Example {
    public static void main(String[] args) {
        int count = 1;
        for(int a=6;a>=1;a--) {
           count = (count+1) * 2;
        }
        System.out.println("公园里原来有: "+count+"个桃子。");
    }
}

执行结果如下图所示:
在这里插入图片描述
5. 落球问题(一个球从10米高度落下,每次弹起2/3的高度。问第五次弹起后的高度是多少?)

/**
 * 落球问题
 */
public class Example {
    public static void main(String[] args) {
        double h = 10;
        for(int a=5;a>=1;a--) {
           h = h * 2/3;
        }
        System.out.println("球第五次弹起的高度是: "+h+"米。");
    }
}

执行结果如下图所示:
在这里插入图片描述
6. 兔子小兔子的问题(一对新生兔,到三个月开始生一对小兔,以后每个月都会生一对小兔,小兔不断长大也会生小兔。假设兔子不死,每次只能生一对(公母),问第24个月末有多少只兔子?)

/**
 * 兔子生小兔子问题
 */
public class Example {
    public static void main(String[] args) {
        int sum = 0;
        int tu1 = 1,tu2 = 1;//tu1是第一个月的兔子数,tu2是第二个月的兔子数
        for(int a=3;a<=24;a++) {
            sum = tu1 + tu2;
            tu2 = tu1;
            tu1 = sum;
        }
        System.out.println("第24个月的月末兔子的数量为: "+sum+"个。");
    }
}

执行结果如下图所示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/cui_yonghua/article/details/92403280