Java 1:利用递归、非递归求n的阶乘

我们都知道n!=123.......(n-1)n;并且当n=0或n=1时n!=1,所以从公式可以将计算条件分为2部分:
1.(n==0||n==1) ,n!=1
2.(n>1) ,n!=(n-1)!*n
代码实现如下:

public class Practice0514{
    public static long factorial1(int n){//递归计算n的阶乘
        if(n==0||n==1){
            return 1;
        }
            else{
                return factorial1(n-1)*n;
            }
    }
    public static long factorial2(int n){//非递归计算n的阶乘
        long ret=1;
        int i=0;
        for(i=1;i<=n;i++){
            ret=ret*i;
        }
        return ret;
    }
    public static void main(String args[]){
        int n=18;//n从这里指定
    System.out.printf("%d的阶乘为%d%n",n,factorial1(n));
    System.out.printf("%d的阶乘为%d%n",n,factorial2(n));
        }
    }

结果如图所示:

原文地址:https://blog.51cto.com/14234228/2396537

时间: 2024-08-30 09:19:43

Java 1:利用递归、非递归求n的阶乘的相关文章

java组合算法(非递归)

package net.kitbox.util; import java.util.Iterator; import java.util.LinkedList; @SuppressWarnings("rawtypes") public class CombineIterator implements Iterator { //源数据 private int[] source; //结果数组大小 private int resultSize; //结果数组个数 private int s

二叉树总结—建树和4种遍历方式(递归&amp;&amp;非递归)

今天总结一下二叉树,要考离散了,求不挂!二叉树最重要的就是 建立.4种遍历方式,简单应用,如何判断两颗二叉树是否相似 二叉树分为 :1.完全二叉树  2.满二叉树 结构性质: 1).满二叉树 高度为h ,节点数则为 2^h - 1,且叶子节点全在最下层,且叶子节点数为2^(n-1)个{n代表二叉树层数,也叫深度} 2).n个节点的 完全二叉树 深度为 int(log2n)(以2为底n的对数)+ 1: 3).非空二叉树 叶子节点个数==双分支节点数+1 4).非空二叉树 某节点编号 n  若有左孩

快速排序递归非递归队列堆栈实现

递归实现 #include<iostream> using namespace std; template <class T> void QuickSort(T A[],int left,int right) { if(left<right) { int i=left; int j=right+1; do { do i++;while(A[i]<A[left]); do j--;while(A[j]>A[left]); if(i<j) Swap(A[i],A

【算法拾遗】二分查找递归非递归实现

转载请注明出处:http://blog.csdn.net/ns_code/article/details/33747953 本篇博文没太多要说的,二分查找很简单,也是常见常考的查找算法,以下是递归非递归的实现. 非递归实现: /* 非递归实现,返回对应的序号 */ int BinarySearch(int *arr,int len,int key) { if(arr==NULL || len<1) return -1; int low = 0; int high = len-1; while(l

Java实现二叉树的创建、递归/非递归遍历

近期复习数据结构中的二叉树的相关问题,在这里整理一下 这里包含: 1.二叉树的先序创建 2.二叉树的递归先序遍历 3.二叉树的非递归先序遍历 4.二叉树的递归中序遍历 5.二叉树的非递归中序遍历 6.二叉树的递归后序遍历 7.二叉树的非递归后序遍历 8.二叉树的层次遍历 这里感谢博客http://blog.csdn.net/skylinesky/article/details/6611442的指导 /**二叉树的结点定义*/ class Node<T>{ private T value; pr

求二叉树镜像的递归非递归实现

1.二叉树定义: [cpp] view plain copy print? typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t     *m_pElemt; struct BTreeNode_t_    *m_pLeft; struct BTreeNode_t_    *m_pRight; } BTreeNod

快速排序的递归非递归实习java

package com.edu.hpu.sort.swap.quick; import java.util.Arrays; import java.util.LinkedList; import com.edu.hpu.sort.Sort; public class QuickSort extends Sort { @Override public int[] doSort(int[] arr) { return quickSort2(arr, 0, arr.length - 1); } @Su

自己写算法---java的堆的非递归遍历

import java.io.*; import java.util.*; public class Main { public static void main(String args[]) { Scanner cin = new Scanner(System.in); //ArrayList<String> list = new ArrayList<String>(); //Scanner scan = new Scanner(System.in); //获取键盘输入的另一种格

利用栈非递归实现块排

递归实现块排:快速排序+随机快排 非递归实现块排具体思路如下图: # -*- coding:utf-8 -*- def quickSort(list): stack=[0] stack.append(len(list)-1) #利用栈存储下标 while stack: j=stack.pop() i=stack.pop() mid=sort(i,j,list) if mid>i+1: stack.append(i) stack.append(mid-1) if mid<j-1: stack.a

【Java】 归并排序的非递归实现

归并排序可以采用递归方法(见:归并排序),但递归方法会消耗深度位O(longn)的栈空间,使用归并排序时,应该尽量使用非递归方法.本文实现了java版的非递归归并排序. 更多:数据结构与算法合集 思路分析 递归排序的核心是merge(int[] arr, int start, int mid, int end)函数,讲[start~mid-1]和[mid~end]部分的数据合并,递归代码是使用递归得到mid,一步步分解数组. 非递归时,我们直接定义要合并的小数组长度从1开始,在较小的长度数组都合