首页 > 其他分享 >递归中Return实例分析

递归中Return实例分析

时间:2024-10-08 13:33:21浏览次数:7  
标签:返回 调用 Return 递归 递归函数 factorial 实例 result

函数递归

  • 局部函数变量的特性自成体系,作为调用函数自身
  • 递归函数不依靠任何外部资源,自成体系的迭代到基准值

return:返回特定的退出状态码,在函数结束时

#! /bin/bash
# using recursion
# 计算阶乘,formula:x!=x*(x-1)!, 使用递归函数得到(x-1)!

function factorial {
    # 递归边界,根据1的阶乘是1
	if [ $1 -eq 1 ]; then
		echo 1
	else
		local temp=$[ $1 -1 ]
        # 接收函数的输出,并将返回值传递给result
		local result=$(factorial $temp)
		echo $[ $result * $1 ]
	fi
}

read -p "Enter value: " valuezi
# result与自成体系的递归函数不同
result=$(factorial $value)
echo "The factorial of $value is : $result"

理解优化

  • 当到达递归边界后,函数return最底层被调用并开始回溯
    • 递归函数的return(回溯)顺序和调用顺序刚好相反!

那是因为上一层执行递归之后的代码会调用下一层返回的值
亦或者说:最底层的实现(return1)作为最外层的调用(return4),如此循环往复

例如,计算 factorial 4 的过程如下:

  • factorial 4 调用 factorial 3,返回 3 * factorial 3

  • factorial 3 调用 factorial 2,返回 2 * factorial 2

  • factorial 2 调用 factorial 1,返回 1 * factorial 1

  • factorial 1 返回 1
    逐层返回时:

  • factorial 2 返回 2 * 1 = 2

  • factorial 3 返回 3 * 2 = 6

  • factorial 4 返回 4 * 6 = 24

  • 当递归停止后,函数内部的result返回的是之后的阶乘,因为每一层递归都会将当前的 result 乘以当前的 $1,直到最外层调用。

标签:返回,调用,Return,递归,递归函数,factorial,实例,result
From: https://www.cnblogs.com/nagisb/p/18451430

相关文章

  • 算法【从递归入手二维动态规划】
    尝试函数有1个可变参数可以完全决定返回值,进而可以改出1维动态规划表的实现。同理,尝试函数有2个可变参数可以完全决定返回值,那么就可以改出2维动态规划的实现。一维、二维、三维甚至多维动态规划问题,大体过程都是:1.写出尝试递归。2.记忆化搜索(从顶到底的动态规划)。3.严......
  • ide启动多个实例
    ide启动多个实例方法一:ide2022.X及之后Run=>EditConfigurations=>选中项目=>“Buildandrun”栏=>ModifyOptions=>选中“Allowmultipleinstances”然后就可以run多次项目了但是要主要改端口方法二:先把项目打包,然后启动多个terminal,每个terminal执行jar包运行......
  • shell实例
    1.显示系统一些基本信息可以将该脚本加入到开机自启动里面,这样开机就会输出基本信息#!/bin/bashinfo(){system=$(hostnamectl|grepSystem|awk'{print$3}')kernel_release=$(hostnamectl|grepKernel|awk-F:'{print$2}')Virtualization=$(hostnamectl|grep......
  • 嵌套类递归
    嵌套类递归都需要一个全局变量记录当前正在处理的位置基础计算器III含有嵌套的表达式求值,时间复杂度O(n)#include<iostream>#include<string>#include<vector>usingnamespacestd;classSolution{public:intwhere;intcalculate(string&s){......
  • Java - 13 方法的递归
    Java-13方法的递归递归必须向退出递归的条件逼近斐波那契数列当n=1,1当n=2,1当n>=3,是前两个数的和publicclassRecursion{ publicstaticvoidmain(String[]args){ Fbnqf=newFbnq(); intn=7; intres=f.num(n); if(res!=-1) System.out.p......
  • 递归_字符串匹配,最长连续序列
    1:字符串匹配题目链接:LCR137.模糊搜索验证-力扣(LeetCode)可以使用递归的方法来检查 input 是否可以匹配 article。目的是正确处理两种通配符:‘.’和‘*’的匹配规则。defis_match(article:str,input:str)->bool:ifnotinput:returnnotarticle......
  • 经典递归
    master公式所有子问题规模相同的递归才能用master公式:T(n)=a*T(n/b)+O(n^c),a、b、c为常数若log(b,a)<c,复杂度为O(n^c),log(b,a)是以b为底a的对数若log(b,a)>c,复杂度为O(n^log(b,a))若log(b,a)=c,复杂度为O(n^c*logn)T(n)=2*T(n/2)+O(n*longn),时间复杂度为O(n*(lo......
  • GraphQL、sequelize-typescript 、Apollo Server 4 实例
    新建项目文件夹$mkdirdemo$cddemo初始化TypeScript配置$npxtsc--init安装SequelizeSequelize-cli$npminstall--save-dev@types/node@types/validator$npminstallsequelizereflect-metadatasequelize-typescript$npminstall--save-devts-node......
  • 基础算法--递归算法【难点、重点】
    今天我们即将要开始讲解算法中第一块儿难啃地骨头--递归了,相信有不少小伙伴都因递归而迷惑过,本文就来给大家详细的讲解一下递归到底是什么东西。让你也能瞬间将他打回原形。递归的理解在学习递归之前,我们先理解递归。什么是递归呢?从名字上看我们可以想到递进+回归两个......
  • 【递归】小q的数列
    https://ac.nowcoder.com/acm/contest/21763/1002pow(2,ans)计算的是2的ans次幂,但是pow()函数返回的是double类型的结果。由于pow()函数主要用于浮点数计算,它返回浮点数结果,而后你可能需要对该结果进行整数操作。如果不进行显式类型转换,这个浮点数结果会丢失精度,特别是在......