Return跳不出这个带自递归的循环

问题描述

privatestringEnumVisual(VisualmyVisual){for(inti=0;i<VisualTreeHelper.GetChildrenCount(myVisual);i++){VisualchildVisual=(Visual)VisualTreeHelper.GetChild(myVisual,i);if(childVisual!=null){if(childVisualisTextBox){if(string.IsNullOrEmpty((childVisualasTextBox).Text)){//returnEnumVisual(childVisual);return(childVisualasTextBox).Name+"不能为空";}if(string.IsNullOrEmpty((childVisualasPasswordBox).Password)){return(childVisualasPasswordBox).Name+"不能为空";}}//(childVisualasTextBox).Text="Winner";EnumVisual(childVisual);}}return"success";}

stringresult=EnumVisual(this);执行发现,return后还会继续执行递归,求问这个问题出在哪里?

解决方案

解决方案二:
retur只是完成了当前这次执行,找一个条件,作为退出条件,每次执行都会判断,你的代码或许也有问题,导致出不去
解决方案三:
retur只是完成了当前这次执行,找一个条件,作为退出条件,每次执行都会判断,你的代码或许也有问题,导致出不去
解决方案四:
retur只是完成了当前这次执行,找一个条件,作为退出条件,每次执行都会判断,你的代码或许也有问题,导致出不去
解决方案五:
大概知道了,递归的原理忘了
解决方案六:
递归就是方法自身调用方法自身,你的return只是结束了当前方法,递归外面还有一堆等待执行的循环呢
解决方案七:
privatestringEnumVisual(VisualmyVisual){stringmessage=string.Empty;boolflag=true;for(inti=0;i<VisualTreeHelper.GetChildrenCount(myVisual);i++){VisualchildVisual=(Visual)VisualTreeHelper.GetChild(myVisual,i);if(childVisual!=null){if(childVisualisTextBox){if(string.IsNullOrEmpty((childVisualasTextBox).Text)){//returnEnumVisual(childVisual);message=(childVisualasTextBox).Name+"不能为空";flag=false;}}//(childVisualasTextBox).Text="Winner";if(childVisualisPasswordBox){if(string.IsNullOrEmpty((childVisualasPasswordBox).Password)){message=(childVisualasPasswordBox).Name+"不能为空";flag=false;}}if(flag){EnumVisual(childVisual);}else{returnmessage;}}}return"success";}}

这样也是一样的--。
解决方案八:
撸主,你递归调用,确实是return了,但是又继续下一次调用了。
解决方案九:
在整个运算过程中,VisualTreeHelper都没有发生改变所以在某个i时的VisualTreeHelper.GetChild(myVisual,i)取得的childVisual就可能与传入的myVisual相等,于是就产生了死循环所以你需要避免出现这种情况,递归前要判断childVisual!=myVisual才行由于不知道你的VisualTreeHelper是如何生成的,无法做进一步的建议
解决方案十:
将你的return语句替换为thrownewException("不能为空");然后在调用方用try..catch

时间: 2024-09-30 08:57:47

Return跳不出这个带自递归的循环的相关文章

c语言-C语言 递归,好像跳不出递归循环了,求大神帮忙看看

问题描述 C语言 递归,好像跳不出递归循环了,求大神帮忙看看 啤酒每罐2.3元,饮料每罐1.9元.小明买了若干啤酒和饮料,一共花了82.3元.我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒. int num_pi=0; int num_yin=1; int money = 823; int fun(int mon); int main() { fun(0); return 0; } int fun(int mon) { if(mon > money) return 0; if(mon

弹出一个带确认和取消的dialog实例

实例如下: /** * 弹出一个带确认和取消的dialog * @param context * @param title * @param msg * @param okbutton * @param ok 点击确定事件 * @param nobutton * @param no 点击取消事件 * @return */ public static AlertDialog openConfirmDialog(Context context, String title, String msg, S

安卓界面跳转出错误。

问题描述 安卓界面跳转出错误. 初学安卓,根据飞鸽改的,先做了个welcome界面,紧接着是动画效果,再点击进入这个软件,现在welcome作为初始界面就闪退,这个动画效果作为初始界面就不闪退,如何解决这个问题?下面是错误日志的信息. 解决方案 你的Activity 没有在 AndroidMainfast.xml 声明: 解决方案二: AcitivityNotFoundException........你的activity需要在AndroidMainfast.xml 声明, 不然 not fou

有时候return后面什么都不带``是什么意思呢``

问题描述 有时候return后面什么都不带``是什么意思呢``比如if(i>1){returni;}else{return;}这里有什么用呢??大家帮我下 解决方案 解决方案二:这里程序段中的retrun表示结束运行下面的代码.例如MessageBox.Show("1");return:MessageBox.Show("2");上面的MessageBox.Show("2");是不被执行的!在publicstringxxxx(){return

测试递归与循环的执行效率与系统开销

测试递归与循环(这里用for)的执行效率与系统开销,首先贴出实例问题:实现Fibonacci数列F(n)=F(n-1)+ F(n-2) 测试环境 Eclipse 1.首先我们用递归来实现 package com.youfeng.test;public class Fab {//递归public static void main(String [] args){ System.out.println(F(40));}public static Long F(int index){ if(index

JavaScript的递归之递归与循环示例介绍_javascript技巧

递归与循环 对于不同类型的需要重复计算的问题,循环和递归两种方法各有所长,能给出更直观简单的方案.另一方面,循环和递归的方法可以互相转换.任何一个循环的代码都可以用递归改写,实现相同的功能:反之亦然.在不失去其普遍性的前提下,可以把循环和递归分别用下列伪代码概括. 伪代码格式说明:循环采用while形式:变量不加定义:赋值用:=:条件表达式和执行的语句都写成函数的形式,圆括号内写上相关的值.其他语法方面,尽量接近Javascript的规范. 复制代码 代码如下: //pseudo code of

XSLT中用递归实现循环

XSLT 是图灵完成的(Turing complete).也就是说,如果有足够的内存,那么 XSLT 可以完成其他任何图灵完成语言(如 C++)所能完成的计算.对于属性更传统的语言的程序员来说,这可能有点奇怪.毕竟 XSLT 缺少对很多算法来说极其重要的特性,其中包括循环和可变的变量. 注意:XSLT 所谓的变量在其他多数语言中称为常量.它们更像是代数变量而不是传统的编程变量. 函数式编程 上述的遗漏并非疏忽所致.XSLT 是一种函数式语言而不是过程性语言.在 C 或 Pascal 这样的过程性

C++递归改循环的问题。

问题描述 C++递归改循环的问题. 函数的代码如下: void divconqrecurse(struct mesh *m struct behavior *b vertex *sortarray int vertices int axis struct otri *farleft struct otri *farright){ struct otri innerleft innerright; int divider; if (vertices == 2) { //结束语句--------对f

算法-递归调用循环的非递归形式

问题描述 递归调用循环的非递归形式 背景:之前在算法书上看到说所有的递归算法都可以写成非递归的形式. 那么遍历一个完全树的所有叶子节点,我看过两个算法,一个是递归调用,非常简单. 还有一个使用了队列:(c++ 和伪代码的混合表示) queue.push(root);//根节点进队 while (!queue.isEmpty()) { queue.push(root->left); queue.push(root->right); if (!queue.top()->hasChild())