社区
C#
帖子详情
为什么输出的只有5
wsxqaz
2005-12-30 06:44:33
下面为什么输出的只有5
private int a(int i)
{
int c=0;
if(i==0)
{
c=0;
return 0;
}
else
{
textbox1.text=textbox1.text+a(i-1));
return i;
}
}
private void b()
{
a(5);
}
...全文
178
17
打赏
收藏
为什么输出的只有5
下面为什么输出的只有5 private int a(int i) { int c=0; if(i==0) { c=0; return 0; } else { textbox1.text=textbox1.text+a(i-1)); return i; } } private void b() { a(5); }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yuanreid
2005-12-31
打赏
举报
回复
看看我的程序,结果还是4
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public int x =0;
private int a(int i)
{
if(i==0)
{
return 0;
}
else
{
x = x + a(i - 1);
return i;
}
}
private void b()
{
a(5);
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
b();
textbox1.Text = x.ToString();
}
}
}
wsxqaz
2005-12-31
打赏
举报
回复
名白了我用Arraylist在每一次递归时Add一个这个时候arraylist里到是有各个值的
止戈而立
2005-12-31
打赏
举报
回复
当你执行a(5)的时候。。
那么:
textbox1.text=textbox1.text+a(i-1);实际上就是:
textbox1.text=textbox1.text+a(4);现在不知道你看懂了没有?无论你在计算a(4)的过程中,i怎么变。最终要 求的是a(4)的值。。
对比一下上面的朋友给你改后的代码吧:
winterice(冬天的冰)
else
{
textbox1.text=textbox1.text+a(i-1));
return i;
}
改成:
else
{
int d=a(i-1);
textbox1.text=textbox1.text+d;//
return i;
}
就输出“01234”了
wsxqaz
2005-12-31
打赏
举报
回复
我没有看懂为什么textbox1.text=textbox1.text+a(i-1)等于textbox1.text=a(i-1),虽然a(i)反回的是一个整型,但是textbox却可以保存字符,而且textbox在每一次帝归的时候都被付过值了,但是在下一次的时候textbox又恢复原来的值了
止戈而立
2005-12-31
打赏
举报
回复
我说过了:textbox1.text=textbox1.text+a(i-1);这一句相当于textbox1.text=a(i-1);
随着i的变化,a(i-1)的值当然会跟着变了。。
wsxqaz
2005-12-31
打赏
举报
回复
我跟了一下发现,每一次递归调用以后,textbox1.text里的值都在变,也就是textbox1.text=a(i-1)的值,比如i=1时textbox1.text=1(textbox.text确实被付值了)但是这个值并没有被保存下去,在跳到下一个递归的地方时值并没有相加,而是从新给textbox付值了,大家跟跟看,每一次递归调用以后好象textbox里是用值的
止戈而立
2005-12-31
打赏
举报
回复
另外提一句:
textbox1.text的结果为什么只输出了一个4。。而没有在多次执行该行代码后获得很多的值。。
这是因为
a(i-1)只返回最终的一个值。。放在哪里它都返回一个整型值。。不会有其它。。
因此textbox1.text如果原本是空字符串,那么textbox1.text=textbox1.text+a(i-1);这一句相当于textbox1.text=a(i-1);
dwp008
2005-12-31
打赏
举报
回复
min_jie(止戈)
调试了一下,终于看明白了。。
首先i的值从5一步步自减到0,算出了a(0)的值。。
然后又从0一步步自增到5,算出a(5)的值。。。
大家可以自己调试看看。。
这个是正解
递归都这样啊
winterice(冬天的冰) 说的方法正好可以反映出最后递归的顺序
止戈而立
2005-12-31
打赏
举报
回复
帮你分析一下代码:
private int a(int i)
{
int c=0;//这个变量没意义
if(i==0)
{
c=0;//没意义
return 0;//这表示a(0)=0
}
else
{
textbox1.text=textbox1.text+a(i-1);//这一句跟返回值没什么关系,也可暂时不看
return i;//这个表示a(i)=i,不要受上一句的影响,返回值跟上一句无关。a(5)当然等于5
}
}
当然,textbox1.text最后的值是4。因为a(i-1)=a(4)=4
止戈而立
2005-12-31
打赏
举报
回复
调试了一下,终于看明白了。。
首先i的值从5一步步自减到0,算出了a(0)的值。。
然后又从0一步步自增到5,算出a(5)的值。。。
大家可以自己调试看看。。
winterice
2005-12-31
打赏
举报
回复
应该输出4,把那代码
else
{
textbox1.text=textbox1.text+a(i-1));
return i;
}
改成:
else
{
int d=a(i-1);
textbox1.text=textbox1.text+d
return i;
}
就输出“01234”了
wsxqaz
2005-12-30
打赏
举报
回复
应该是4
我不管是字符连接还是相加反正都不应该输出一个数啊
就算是字符连接也应该是123……
net_explorer
2005-12-30
打赏
举报
回复
问题在于他用的是字符型的和整形的相加了.这样的话,就是字符串之间的连接了.
yuanreid
2005-12-30
打赏
举报
回复
to ChengKing(Enthusiasm Bigrosoft)
你运行试试吧
yuanreid
2005-12-30
打赏
举报
回复
用C++试了试,结果是对的返回10。即 0+1+2+3+4 = 10
而用C#跟踪了一下,发现是 0+1+1+1+1 = 4
确实不解。
ChengKing
2005-12-30
打赏
举报
回复
a()方法第一次执行的时候,这句: return i; 就执行了,且返回了:5
中间虽然进行了许多递归调用,但根本不影响最终结果: 5
yuanreid
2005-12-30
打赏
举报
回复
我输出的是4
智能电视只有数字音频
输出
,传统音响只有模拟音频输入,音频连接解决方案!
以上就是我为大家介绍的如何将智能电视的数字音频
输出
接入传统只有模拟音频输入的音响的方法。02. 一根3.5mm音频转红白RCA(莲花接口)的音频线,用于连接音频转换器的3.5mm模拟音频
输出
接口和音响的模拟音频输入...
tensorflow softmax
输出
只有0或1
原 tensorflow softmax
输出
只有0或1 2017年12月07日 11:21:52 HaHa_33 阅读数:1658 softm...
spark sql
输出
只有一个partition导致下游stage只有一个task
spark sql
输出
只有一个partition 这个样会严重影响下游的stage,如果不恰当处理,将会导致任务处理特别慢,而且资源严重浪费,所以必须要重新分区,repartition(n) ...
解决Linux只有Nvidia HDM声卡
输出
的现象
解决Linux只有Nvidia HDM声卡
输出
的现象 起因 前几天刚刚重装了ArchLinux然后安装桌面后发现声卡不能用,一直在网上找教程找了几天,问题都对不上。倒是在archlinuxcn论坛找到了一个相同问题的,但是那个帖子莫得...
为什么本来想
输出
浮点数,却一直
输出
0.000000
#include<stdio.h>...float 能够
输出
7位有效数字,double 能够
输出
15位,但只有你有要求的时候。 若是这样 float a=1/3 就要注意在程序里的“ / ”这个符号,两边的数是不是整数还是浮点数 ...
C#
111,120
社区成员
642,537
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章