递归函数的返回值没有return时怎样返回

后使用快捷导航没有帐号?
只需一步,快速开始
请完成以下验证码
请完成以下验证码
主题帖子荣誉
查看: 658|回复: 13
& 累计签到:402 天连续签到:2 天
马上注册加入鱼C,享用更多服务吧^_^
才可以下载或查看,没有帐号?
本帖最后由 shuofxz 于
20:58 编辑
如下代码,是一个递归调用的函数。比如输入5的时候,test(5),在执行最后一次递归的时候temp=0,进入到else里面,执行的时候发现这行代码是执行了的 print(&return前输出的语句&),但是却没有打印出100来,是return没有执行吗?
def test(temp):
& & #默认输入一个大于零的整数
& & if temp:
& && &&&print(temp)
& && &&&print('A')
& && &&&temp = temp // 2
& && &&&test(temp)
& && &&&print('B')
& & else:
& && &&&print(&return前输出的语句&)
& && &&&return 100
& && &&&print(&return后输出的语句&)复制代码
tqqcwsctmhg3dh.jpg (104.23 KB, 下载次数: 0)
20:57 上传
还有第二种情况,我把return语句写到了if判断的外面,递归的时候多次执行了这个函数,然而最后的输出却只打印了一个100,这是为什么?
def test(temp):
& & #默认输入一个大于零的整数
& & if temp:
& && &&&print(temp)
& && &&&print('A')
& && &&&temp = temp // 2
& && &&&test(temp)
& && &&&print('B')
& & else:
& && &&&print(&return前输出的语句&)
& & return 100
& & print(&return后输出的语句&)复制代码
201107toejgvi7xi78say2.jpg (98.3 KB, 下载次数: 0)
20:58 上传
& 累计签到:245 天连续签到:14 天
本帖最后由 SixPy 于
19:34 编辑
递归很简单的
假设你的 temp = 3
共运行 3//2=1;1//2=0 ,3 次
那么,就把你的test() 函数复制3份
然后,分别改名为 test1 、test2 、test3
3个函数内容都一样,只是名字不同
test1 中的递归改为调用test2
test2 中的递归改为调用test3
最后,你用debug调试模式,单步执行,看看执行过程,就明白了
& 累计签到:402 天连续签到:2 天
递归很简单的
假设你的 temp = 6
共运行 6//2=3 次
恩,递归的过程我明白,
我想问的是:我在函数里面写了返回值,而且我单步调试的时候也确实发现执行到了return 100那一步,但是最后的输出却没有100
搜狗截图06.jpg (104.23 KB, 下载次数: 0)
19:32 上传
& 累计签到:245 天连续签到:14 天
恩,递归的过程我明白,
我想问的是:我在函数里面写了返回值,而且我单步调试的时候也确实发现执行到了 ...
return 只是返回,然而你没安排变量去接收啊~ 100被丢弃了~
pirnt 才是输出到终端~
& 累计签到:402 天连续签到:2 天
return 只是返回,然而你没安排变量去接收啊~ 100被丢弃了~
搜狗截图15.jpg (26.39 KB, 下载次数: 0)
19:47 上传
我觉得return的值应该直接输出的吧
& 累计签到:245 天连续签到:14 天
我觉得return的值应该直接输出的吧
那是你的错觉~
交互模式下,Python会安排一个默认变量 '_' 去接收返回值。
你可以试一下
print(val)
& 累计签到:402 天连续签到:2 天
那是你的错觉~
交互模式下,Python会安排一个默认变量 '_' 去接收返回值。
print(val)
这两句怎么用呀?直接运行会报错呀
还有我不觉得是我的错觉。。。你看我的第二个例子的输出
搜狗截图24.jpg (98.3 KB, 下载次数: 0)
20:11 上传
这里面return就有返回值,(但是只有一个100也是我不解的地方,我觉得每次递归执行这个函数都应该输出一个100,而不是只有一个,就像我题目里描述的那样)
& 累计签到:245 天连续签到:14 天
print(val)
这两句怎么用呀?直接运行会报错呀&&& def f():
& & & & return 5
&&& f()
5
&&& val=_
&&& print(val)
5
&&& 复制代码
& 累计签到:402 天连续签到:2 天
好神奇& &学到了!
但是我还是不能理解,我在题目里面描述的,为什么第一种情况就没打印出100来,第二种情况只打印出一个100
& 累计签到:245 天连续签到:14 天
好神奇& &学到了!
但是我还是不能理解,我在题目里面描述的,为什么第一种情况就没打印出100来,第二种 ...def test(temp):
& & #默认输入一个大于零的整数
& & if temp:
& && &&&print(temp)
& && &&&print('A')
& && &&&temp = temp // 2
& && &&&test(temp)
& && &&&print('B')
& & else:
& && &&&print(&return前输出的语句&)
& & return 100
& & print(&return后输出的语句&)
& &
test(3)& &
input()复制代码
添加一个input暂停一下
你不要用idle等交互界面来运行
而是直接双击py文件执行,看看有没有显示100
理由看6楼,还是你的错觉~
& 累计签到:1 天连续签到:1 天
简单的来说,第一种情况下,你的第一层递归函数没有执行return 100,而第二种情况下第一曾递归函数执行了return 100。
& 累计签到:402 天连续签到:2 天
哦哦,确实是。&&非常感谢~&&之前一直没注意到这个问题
& 累计签到:402 天连续签到:2 天
简单的来说,第一种情况下,你的第一层递归函数没有执行return 100,而第二种情况下第一曾递归函数执行了re ...
现象确实是这样,不过能说下问什么吗?
& 累计签到:245 天连续签到:14 天
简单的来说,第一种情况下,你的第一层递归函数没有执行return 100,而第二种情况下第一曾递归函数执行了re ...
呃~~~~~~~~~
你的理解是错的~
你用调试模式单步执行,就知道了~
小甲鱼强烈推荐
为了增加趣味性,本届比赛增加了“押宝玩法”、“竞猜玩法”和“擂主玩法”。
本期题目:最大包含的水的面积
移动客户端下载(未启用)
微信公众号
Powered by
Copyright &
&&& All Rights Reserved.C语言 递归调用中是如何实现求最值的? 递归调用在return语句前,怎么返回? 帮忙解释一下,谢_百度知道
C语言 递归调用中是如何实现求最值的? 递归调用在return语句前,怎么返回? 帮忙解释一下,谢
C语言递归调用中是如何实现求最值的?递归调用在return语句前,怎么返回?帮忙解释一下,谢谢!
我有更好的答案
,n);在return之前加上printf(&(注意大括号)这样执行后你就知道实际的执行顺序了,跟着打印出来的慢慢分析,就可以理解递归的实际过程;end return:%d&#92,告诉你一个方法;n&,n); /&#47:在函数f的第一个语句前加上printf(&quot:%d\n&quot这就是一个很正常的递归调用。要理解递归的执行过程
请原谅,可以解释一下吗?谢谢
这就是递归调用,你可以看到,执行从9开始,但实际最先完成并返回的是1(return a[0],这里你没有打印,但实际是在end return 2之前完成),然后依次执行了2 、3 。。。。每次都返回给上一级调用,最终递归9次。因此,你的思维应该是,9调用了8。。。等等,实际执行1返回给2、返回给3。。。等等,按照这个思路走(实际就是反向的),比较了1、2中最大的(然后返回),这个最大的再和3比较,返回最大的,再和4比较,以此类推。
谢谢,已成为你的粉丝
采纳率:85%
来自团队:
该地方n=2, 用t和a[1]比较;1的时候,首先调用f(a, n-1),得到t,然后让这个t和a[n-1]进行比较,如果t&gt,退出到main函数时即得到了最大值,递归调用时会先到n=1的时候得到t=a[0],退出到调用的地方,该地方n=3,然后用这个较大值和a[2]比较,依次类推从代码可以知道,当n=1时,返回a[0],返回较大值,退出到上一个调用的地方,在n&a[n-1]就返回t的值,否则返回a[n-1]的值
为您推荐:
其他类似问题
慢性中毒的相关知识
换一换
回答问题,赢新手礼包return语句用于退出函数,向调用方返回一个表达式。return在不带参数的情况下(或者没有写return语句),
默认返回None。None是一个特殊的值,它的数据类型是NoneType。NoneType是Python的特殊类型,它只有一个取值None。
它不支持任何运算也没有任何内建方法,和任何其他的数据类型比较是否相等时永远返回false,也可以将None赋值给任何变量。。。
1》当函数没有显式return,默认返回None值
2》当递归函数有return时,在递归的地方也要return,不然永远返回的是None
1 import time
2 def binary_search(data,find_n):
Len=len(data)
if Len==1:
if data[0]==find_n:
#print("找到,在第%d个" %(1))
#print("没找到")
<span style="color: #
<span style="color: #
elif Len==2:
<span style="color: #
if data[0]==find_n:
<span style="color: #
#print("找到,在第%d个" %(1))
<span style="color: #
<span style="color: #
elif data[1]==find_n:
<span style="color: #
#print("找到,在第%d个" %(2))
<span style="color: #
<span style="color: #
<span style="color: #
#print("没找到")
<span style="color: #
<span style="color: #
<span style="color: #
mid_n=int(Len/2)
<span style="color: #
mid_val=data[mid_n]
<span style="color: #
if mid_val==find_n:
<span style="color: #
#print("找到,在第%d个" %(mid_n+1))
<span style="color: #
<span style="color: #
elif mid_val&find_n:
<span style="color: #
right_val=data[mid_n:]
<span style="color: #
return binary_search(right_val,find_n)
<span style="color: #
<span style="color: #
left_val=data[:mid_n]
<span style="color: #
return binary_search(left_val,find_n)
<span style="color: #
<span style="color: # def split_data(n):
<span style="color: #
start=<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: #
while flag:
<span style="color: #
if Len&1000:
<span style="color: #
data=[x for x in range(start,stop,1)]
<span style="color: #
yield data
<span style="color: #
start=start+1000
<span style="color: #
stop=stop+1000
<span style="color: #
Len=Len-1000
<span style="color: #
<span style="color: #
data=[x for x in range(start,n,1)]
<span style="color: #
yield data
<span style="color: #
flag=<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: # if __name__=="__main__":
<span style="color: #
t0=time.time()
<span style="color: #
for data in split_data(00):
<span style="color: #
f=binary_search(data,)
<span style="color: #
<span style="color: #
<span style="color: #
print("已找到")
<span style="color: #
<span style="color: #
t1=time.time()-t0
<span style="color: #
elif mid_val&find_n:&&&&&&&&&&&& right_val=data[mid_n:]&&&&&&&&&&&& return binary_search(right_val,find_n)
else:&&&&&&&&&&&& left_val=data[:mid_n]&&&&&&&&&&&& return binary_search(left_val,find_n)
阅读(...) 评论()14:22 提问
&递归&return返回值中 && 是什么用法?
首先,本人新手,请大神解决基础题一题。
用递归判断数列是否为递增,答案如下:
bool fun(int a[], int n)
if( n= =2 )
return a[n-1] &= a[n-2];
return fun( a,n-1) && ( a[n-1] &= a[n-2] );_
最后一句中的&&是个什么用法?
按赞数排序
与 符号 表示 :如果 第一个结果为假,返回假,如果第一个结果为真,第二个结果为假,返回假,如果第一个结果为真,第二个结果为真,返回值;
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!
就是个条件而已,就是判断那两个条件是否都满足,满足就return true 否则false
同时为真。。这那是什么用法?
与运算符,两个条件都满足才会执行
其他相关推荐

我要回帖

更多关于 c 递归函数返回值 的文章

 

随机推荐