רקורסיה - פתרון תרגילים מהספר
class NumOfDigits17
{
public static int NumOfDigits(int num)//טענת כניסה:הפעולה מקבלת שלם חיובי
{ //טענת יציאה:הפעולה מחזירה את מספר ספרות המספר
if (num < 10)
return 1;
return 1 + NumOfDigits(num / 10);
}
}
class IdenticalDigits
{
public int NumOfIdentDigits(int num1, int num2)//טענת כניסה:הפעולה מקבלת שני שלמים חיוביים מאותו סדר גודל
{
//טענת יציאה:הפעולה מחזירה את מספר הספרות הזהות בערכן ובמיקומן
if (num1 > 0 && num2 > 0)
{
if (num1 % 10 == num2 % 10)
return 1 + NumOfIdentDigits(num1 / 10, num2 / 10);
else
return NumOfIdentDigits(num1 / 10, num2 / 10);
}
return 0;
}
}
class AvarageOfDigits
{
public float DigitsAverage(int num, int k)//טענת כניסה:הפעולה מקבלת שלם חיובי
{ //טענת יציאה:הפעולה מחזירה את ממוצע ספרותיו
float sum;
if (k == 1)
return num;
sum = DigitsAverage(num / 10, k-1) * (k-1);
return ((num % 10) + sum) / k;
}
//גירסא שניה
public double SumOfDigits(int num)//טענת כניסה:הפעולה מקבלת שלם חיובי
{ //טענת יציאה:הפעולה מחזירה את סכום ספרותיו
if (num < 10)
return num;
return num % 10 + SumOfDigits(num / 10);
}
}
public class BinaryBase
{
//לייצוג ספרות עשרוניות בבינארי אנו זקוקים עד לארבע סיביות בלבד
//0 = 0;1 = 1; 2 = 10; 3 = 11;
//4 = 100 ; 5 = 101
//6 = 110 ; 7 = 111 ; 8 = 1000 ; 9 = 1001;
//הרעיון הוא לחלק מספר נתון ב 2 ולרשום את השאריות למשל
// שארית שלם
//n=9 => 9/2 = 4 1
// 4/2 = 2 0
// 2/2 = 1 0
// 1/2 = 0 1
//קוראים את השאריות מהסוף להתחלה וזה המספר/הייצוג בבינארי
public void PrintBinaryDigit(int digit)
{
if (digit > 0)
{
PrintBinaryDigit(digit / 2);
Console.Write(digit % 2);
}
}
/////////////////////////////////////////////////////
public void PrintBinary(int digit)
{
int d;
if (digit > 0)
{
d = digit % 2;
PrintBinary(digit / 2);
Console.Write(d);
}
}
/////////////////////////////////////////////////////
}
public class NumPrefix
{
public void PrintNumPrefix(int num)
{
if (num > 10)
{
Console.WriteLine(num);
PrintNumPrefix(num / 10);
}
else
Console.WriteLine(num);
}
}
public class PowerXbyY
{
public int PowXbyY(int x, int y)
//{
// int power;
// if (y > 1)
// {
// power = x * PowXbyY(x, y - 1);
// return power;
// }
// else
// if (y == 1)
// return x;
// else
// return 1;
//}
{
if (y == 0)
return 1;
return x * PowXbyY(x, y - 1);
}
}
class ArrayRecurse
{
internal int SumOfArray(int[] arr, int i)//שאלה 23
{
if (i == 0)
return arr[i];
return arr[i] + SumOfArray(arr, i - 1);
}
internal static bool IsArraySorted(int[] arr,int i)//שאלה 24
{
//ניעזר בתכונה הנקראת טרנזיטיביות
//אם a<b וגם b<c אז בוודאי a<c
//כלומר קיים : a<b<c
if (i < arr.Length - 2)
if (!IsArraySorted(arr, i + 1))
return false;
return (arr[i] < arr[i + 1]);
}
internal static bool IsSidraHeshbonit(int[] sidra, int i)
{
int diff = sidra[0] - sidra[1];
if(i < sidra.Length - 2)
if(!IsSidraHeshbonit(sidra,i+1))
return false;
return (diff == sidra[i] - sidra[i+ 1]);
}
}