递归算法;求n的阶层

发布时间 2023-04-14 21:57:58作者: 阿霖找BUG

java:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String a=sc.next();
        int b=Integer.parseInt(a);
        System.out.print(factorial(b));
    }
    public static int factorial(int a){
        if(a==1){
            return a;
        }else{
            return factorial(a-1)*a;
        }
    }
}

C:(main函数最好在最后面或者使用函数声明)

#include <stdio.h>

long factorial(int a){
    if(a==1){
    return a;
    }
    else{
        return factorial(a-1)*a;
    }
}
int main()
{
    int a;
    scanf("%d",&a);
    printf("%d",factorial(a));
   return 0;
}

如何逐层进入,又是如何逐层退出的。

每一个递归函数都应该只进行有限次的递归调用,否则它就会进入死胡同,永远也不能退出了,这样的程序是没有意义的。

存在限制条件,当符合这个条件时递归便不再继续。对于 factorial(),当形参 n 等于 1 时,递归就结束了。每次递归调用之后越来越接近这个限制条件。对于 factorial(),每次递归调用的实参为 n - 1,这会使得形参 n 的值逐渐减小,越来越趋近于 1 。