Násobenie rekurziou

Programovacie jazyky, rady, poradňa...
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Násobenie rekurziou

Príspevok od používateľa audiotrack »

Vedel by niekto vytvoriť program, ktorý pomocou rekurzie vynásobí dve čísla načítané zo súboru, ale môže sa použiť iba jedna premenná? Už sa s tým trápim a došli nápady.
Budem vďačný za každú radu ktorá ma posunie vpred
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Kód: Vybrať všetko

#include	<stdio.h>

int nasob(int a, int b)
{
	if (b == 0)
		return 0;
	return a + nasob(a, b-1);
}

int main(void)
{
	printf("%i\n", nasob(11, 13));
}
ale to s jednou premennou som nepochopil, kedže tá funkcia potrebuje minimálne dve.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

nie nepotrebuje.. už som na to prišiel (btw: ty ešte nevieš že ja som delphi user a ty mi sem hodíš céčko? hehe.. )

Kód: Vybrať všetko

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a:integer;
  vstup:textfile;
implementation

{$R *.dfm}

function sucin:integer;
begin
 if a>1 then begin
              a:=a-1;
              sucin:=sucin + a;
        end else begin
             read(vstup,a);
             sucin:=a;
             end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 Assignfile(vstup,'cisla.txt');
 Reset(vstup);
 Readln(vstup,a);
 showmessage(IntToStr(sucin));
 Closefile(vstup);
end;

end.
ale dík za ochotu
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Ale aj ty tam máš premenné dve (a a result/sucin). :)

// chrono: a v tom mojom sú v podstate premenné tri :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

to je o inom.. :P
dudulka22
Novice
Novice
Príspevky: 7
Registrovaný: 13 jún 2005, 20:10
Bydlisko: Levice

Príspevok od používateľa dudulka22 »

Nejake nove riesenie by sa nenaslo ? :cry:
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Pochybujem, že nejaké iné riešenie existuje (ak je zadanie rovnaké, ako mal audiotrack).
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

ake dve cisla tam nasobis? toto je len druha mocnina ...

inak mi chvilu trvalo kym som prisiel na to preco to vobec funguje ... globalna premenna :roll: :lol:
zaggi
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 314
Registrovaný: 04 feb 2007, 19:32

Príspevok od používateľa zaggi »

neviem sice aky zmysel ma toto smrtelne riesenie ale ide to aj bez premennej (je to java, mozete to brat ako pseudokod)

Kód: Vybrať všetko

public class HaluzNasobenie
{
	static int vynasob(Scanner subor)
	{
		if (subor.hasNextInt())
			return subor.nextInt() * vynasob(subor);
		else
			return 1;
	}
	public static void main(String[] args) throws FileNotFoundException
	{
		Scanner scan = new Scanner(new File("in.txt"));
		System.out.println(vynasob(scan));
	}
}
makaveli
King
King
Používateľov profilový obrázok
Príspevky: 1688
Registrovaný: 17 okt 2005, 20:55
Bydlisko: Brno
Kontaktovať používateľa:

Príspevok od používateľa makaveli »

neviem, ako spravit to nacitanie premennych zo suboru, ale vynasobenie dvoch cisel rekurziou bez pouzitia akejkolvek premennej, sa da spravit takto, pomocou funkcionalneho programovacieho jazyka haskell:

Kód: Vybrať všetko

vynasob x 0 = 0
vynasob 0 y = 0
vynasob x 1 = x
vynasob x y = x + (vynasob x (y-1))
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

gwixt napísal:ake dve cisla tam nasobis? toto je len druha mocnina ...

inak mi chvilu trvalo kym som prisiel na to preco to vobec funguje ... globalna premenna :roll: :lol:
ak narážaš na to moje, tak nie, nie je to druhá mocnina
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

audiotrack napísal:ak narážaš na to moje, tak nie, nie je to druhá mocnina
aha ok ... ty to nacitas zase zo suboru :roll:
Napísať odpoveď