我不明白为什么这段代码会给我“错误”而不是2。我正在尝试不递归地这样做。递归的示例也将不胜感激。
def addDigits(num):
num = str(num)
if(len(num) > 1):
for i in range(0, len(num)-1):
for j in range(1, len(num)):
if(len(str(int(num[i]) + int(num[j]))) > 1):
x = len(str(int(num[i]) + int(num[j])))
for i2 in range(0, x-1):
for j2 in range(1, x):
if(x == 1):
return(int(num[i]) + int(num[j]))
else:
return('Error')
else:
return('Error2')
else:
return(num)
print(addDigits(38))
答案 0 :(得分:0)
我认为,如果您输出x
,则会发现x=2
而不是x=1
,因此程序将运行else: return('Error')
。
答案 1 :(得分:0)
就像您提到的那样,递归是最好的方法。如果您编写的代码具有两个以上的循环,请再考虑一下是否绝对必要。
package com.example.jabed.algorithmsimulator;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class BubbleSortActivity extends AppCompatActivity {
private Button button;
private TextView t2;
private EditText e1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bubble_sort);
> **taken input from Activity2.xml though editText**
Intent intent = getIntent();
String bubble = intent.getStringExtra("Extra_message");
t2 =(TextView)findViewById(R.id.textView2);
> **putting it an array by sparating with space in the input section**
String [] intString=bubble.split(" ");
**in bellow section is my sorting code just**
int bubbleArr[]=new int[intString.length];
for(int i=0;i<bubbleArr.length;i++) {
bubbleArr[i]=Integer.parseInt(intString[i]);
}
int n = bubbleArr.length;enter link description here
t2.setText(" Passes in ascending order" + "\n");
for (int i = 0; i < n-1; i++) {
boolean swap=false;
for (int j = 0; j < n-i-1; j++) {
if (bubbleArr[j] > bubbleArr[j+1])
{
int temp = bubbleArr[j];
bubbleArr[j] = bubbleArr[j+1];
bubbleArr[j+1] = temp;
swap=true;
}
}
if(swap==false)
break;
> **here i want to show all the passing**
String []strArr=new String[bubbleArr.length];
t2.setText(" Pass "+(i+1)+": ");
for (int k=0; k<n; k++) {
strArr[k]=String.valueOf(bubbleArr[k]);
t2.setText(strArr[k]+" ");
}
t2.setText("\n");
}
}
public void onclickButton(View V){
Intent intent = new Intent(this,Activity2.class);
startActivity(intent);
}
}
输出:
def add_digits(x):
if x/10>1:
x=add_digits(sum([int(i) for i in str(x)]))
else:
return x
if x/10<1:
return x
add_digits(123456)
上面的代码将帮助您对数字求和,直到其为单个数字为止。
与C或C ++不同,python不是一种超快速的语言。避免循环会产生重大变化。
答案 2 :(得分:0)
这是使用循环的一种方法,我来自Java,所以请忍受分号。
def addDigits(num):
while(num >= 10):
int temp = 0;
while(num > 0):
temp = temp + num % 10;
num = num/10;
num = temp;
return num;
addDigits(38)
这应该给您正确的答案,即2